From 7a5147616b16b78a65d80f13b85c3010131d3b7a Mon Sep 17 00:00:00 2001 From: Irina Popa Date: Mon, 5 Feb 2018 21:07:20 +0200 Subject: [PATCH] rustc_target: move LayoutOf's type parameter to an associated type. --- src/librustc/lint/context.rs | 3 ++- src/librustc/ty/layout.rs | 12 +++++++----- src/librustc_mir/interpret/eval_context.rs | 6 ++++-- src/librustc_mir/transform/const_prop.rs | 3 ++- src/librustc_target/abi/mod.rs | 7 ++++--- src/librustc_trans/context.rs | 3 ++- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index d5849ea22b1..f90baa2ccd9 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -657,7 +657,8 @@ impl<'a, 'tcx> LateContext<'a, 'tcx> { } } -impl<'a, 'tcx> LayoutOf> for &'a LateContext<'a, 'tcx> { +impl<'a, 'tcx> LayoutOf for &'a LateContext<'a, 'tcx> { + type Ty = Ty<'tcx>; type TyLayout = Result, LayoutError<'tcx>>; fn layout_of(self, ty: Ty<'tcx>) -> Self::TyLayout { diff --git a/src/librustc/ty/layout.rs b/src/librustc/ty/layout.rs index c7fbd31b259..069250bb055 100644 --- a/src/librustc/ty/layout.rs +++ b/src/librustc/ty/layout.rs @@ -1371,7 +1371,8 @@ impl MaybeResult for Result { } } -impl<'a, 'tcx> LayoutOf> for LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> { +impl<'a, 'tcx> LayoutOf for LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> { + type Ty = Ty<'tcx>; type TyLayout = Result, LayoutError<'tcx>>; /// Computes the layout of a type. Note that this implicitly @@ -1397,7 +1398,8 @@ impl<'a, 'tcx> LayoutOf> for LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> { } } -impl<'a, 'tcx> LayoutOf> for LayoutCx<'tcx, ty::maps::TyCtxtAt<'a, 'tcx, 'tcx>> { +impl<'a, 'tcx> LayoutOf for LayoutCx<'tcx, ty::maps::TyCtxtAt<'a, 'tcx, 'tcx>> { + type Ty = Ty<'tcx>; type TyLayout = Result, LayoutError<'tcx>>; /// Computes the layout of a type. Note that this implicitly @@ -1458,7 +1460,7 @@ impl<'a, 'tcx> ty::maps::TyCtxtAt<'a, 'tcx, 'tcx> { impl<'a, 'tcx> TyLayout<'tcx> { pub fn for_variant(&self, cx: C, variant_index: usize) -> Self - where C: LayoutOf> + HasTyCtxt<'tcx>, + where C: LayoutOf> + HasTyCtxt<'tcx>, C::TyLayout: MaybeResult> { let details = match self.variants { @@ -1495,7 +1497,7 @@ impl<'a, 'tcx> TyLayout<'tcx> { } pub fn field(&self, cx: C, i: usize) -> C::TyLayout - where C: LayoutOf> + HasTyCtxt<'tcx>, + where C: LayoutOf> + HasTyCtxt<'tcx>, C::TyLayout: MaybeResult> { let tcx = cx.tcx(); @@ -1623,7 +1625,7 @@ impl<'a, 'tcx> TyLayout<'tcx> { // FIXME(eddyb) traverse already optimized enums. fn find_niche(&self, cx: C, count: u128) -> Result, LayoutError<'tcx>> - where C: LayoutOf, TyLayout = Result>> + + where C: LayoutOf, TyLayout = Result>> + HasTyCtxt<'tcx> { let scalar_component = |scalar: &Scalar, offset| { diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index 14ee795b3b1..42f0e38af1f 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -162,7 +162,8 @@ impl<'c, 'b, 'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> layout::HasTyCtxt<'tcx> } } -impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf> for &'a EvalContext<'a, 'mir, 'tcx, M> { +impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf for &'a EvalContext<'a, 'mir, 'tcx, M> { + type Ty = Ty<'tcx>; type TyLayout = EvalResult<'tcx, TyLayout<'tcx>>; fn layout_of(self, ty: Ty<'tcx>) -> Self::TyLayout { @@ -171,8 +172,9 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf> for &'a EvalCont } } -impl<'c, 'b, 'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf> +impl<'c, 'b, 'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf for &'c &'b mut EvalContext<'a, 'mir, 'tcx, M> { + type Ty = Ty<'tcx>; type TyLayout = EvalResult<'tcx, TyLayout<'tcx>>; #[inline] diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index a3d96f0c073..47b2f430bc7 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -72,7 +72,8 @@ struct ConstPropagator<'b, 'a, 'tcx:'a+'b> { param_env: ParamEnv<'tcx>, } -impl<'a, 'b, 'tcx> LayoutOf> for &'a ConstPropagator<'a, 'b, 'tcx> { +impl<'a, 'b, 'tcx> LayoutOf for &'a ConstPropagator<'a, 'b, 'tcx> { + type Ty = ty::Ty<'tcx>; type TyLayout = Result, LayoutError<'tcx>>; fn layout_of(self, ty: ty::Ty<'tcx>) -> Self::TyLayout { diff --git a/src/librustc_target/abi/mod.rs b/src/librustc_target/abi/mod.rs index 8cdc34db2df..b0a53445659 100644 --- a/src/librustc_target/abi/mod.rs +++ b/src/librustc_target/abi/mod.rs @@ -757,8 +757,9 @@ impl LayoutDetails { } } -pub trait LayoutOf { +pub trait LayoutOf { + type Ty; type TyLayout; - fn layout_of(self, ty: T) -> Self::TyLayout; -} \ No newline at end of file + fn layout_of(self, ty: Self::Ty) -> Self::TyLayout; +} diff --git a/src/librustc_trans/context.rs b/src/librustc_trans/context.rs index 4d781d7280d..44149ec9a4e 100644 --- a/src/librustc_trans/context.rs +++ b/src/librustc_trans/context.rs @@ -459,7 +459,8 @@ impl<'a, 'tcx> ty::layout::HasTyCtxt<'tcx> for &'a CodegenCx<'a, 'tcx> { } } -impl<'a, 'tcx> LayoutOf> for &'a CodegenCx<'a, 'tcx> { +impl<'a, 'tcx> LayoutOf for &'a CodegenCx<'a, 'tcx> { + type Ty = Ty<'tcx>; type TyLayout = TyLayout<'tcx>; fn layout_of(self, ty: Ty<'tcx>) -> Self::TyLayout {