]> git.lizzy.rs Git - rust.git/commitdiff
Do not store `ty`
authorscalexm <martin.alex32@hotmail.fr>
Mon, 7 Aug 2017 11:22:48 +0000 (13:22 +0200)
committerscalexm <martin.alex32@hotmail.fr>
Mon, 14 Aug 2017 13:07:21 +0000 (15:07 +0200)
src/librustc/traits/mod.rs
src/librustc/traits/select.rs
src/librustc/traits/structural_impls.rs
src/librustc_mir/shim.rs
src/librustc_trans/monomorphize.rs

index 1c6d75ace52e654af8aaf283dadafdc0fb70ebc9..d1938197e652965dbf338ac1c233141f36c9e909 100644 (file)
@@ -301,7 +301,7 @@ pub enum Vtable<'tcx, N> {
     VtableObject(VtableObjectData<'tcx, N>),
 
     /// Successful resolution for a builtin trait.
-    VtableBuiltin(VtableBuiltinData<'tcx, N>),
+    VtableBuiltin(VtableBuiltinData<N>),
 
     /// Vtable automatically generated for a closure. The def ID is the ID
     /// of the closure expression. This is a `VtableImpl` in spirit, but the
@@ -345,9 +345,7 @@ pub struct VtableDefaultImplData<N> {
 }
 
 #[derive(Clone)]
-pub struct VtableBuiltinData<'tcx, N> {
-    /// `ty` can be used for generating shim for builtin implementations like `Clone::clone`.
-    pub ty: ty::Ty<'tcx>,
+pub struct VtableBuiltinData<N> {
     pub nested: Vec<N>
 }
 
@@ -771,7 +769,6 @@ pub fn map<M, F>(self, f: F) -> Vtable<'tcx, M> where F: FnMut(N) -> M {
             }),
             VtableParam(n) => VtableParam(n.into_iter().map(f).collect()),
             VtableBuiltin(i) => VtableBuiltin(VtableBuiltinData {
-                ty: i.ty,
                 nested: i.nested.into_iter().map(f).collect(),
             }),
             VtableObject(o) => VtableObject(VtableObjectData {
index 88cca70993e9a5a71422e271296a2161793bbb4a..46bdb1344b2fe3fe920192e135b40e49370ec27d 100644 (file)
@@ -2265,7 +2265,7 @@ fn confirm_param_candidate(&mut self,
     fn confirm_builtin_candidate(&mut self,
                                  obligation: &TraitObligation<'tcx>,
                                  has_nested: bool)
-                                 -> VtableBuiltinData<'tcx, PredicateObligation<'tcx>>
+                                 -> VtableBuiltinData<PredicateObligation<'tcx>>
     {
         debug!("confirm_builtin_candidate({:?}, {:?})",
                obligation, has_nested);
@@ -2303,8 +2303,7 @@ fn confirm_builtin_candidate(&mut self,
         debug!("confirm_builtin_candidate: obligations={:?}",
                obligations);
 
-        let self_ty = self.infcx.shallow_resolve(obligation.predicate.skip_binder().self_ty());
-        VtableBuiltinData { ty: self_ty, nested: obligations }
+        VtableBuiltinData { nested: obligations }
     }
 
     /// This handles the case where a `impl Foo for ..` impl is being used.
@@ -2611,7 +2610,7 @@ fn confirm_poly_trait_refs(&mut self,
 
     fn confirm_builtin_unsize_candidate(&mut self,
                                         obligation: &TraitObligation<'tcx>,)
-        -> Result<VtableBuiltinData<'tcx, PredicateObligation<'tcx>>, SelectionError<'tcx>>
+        -> Result<VtableBuiltinData<PredicateObligation<'tcx>>, SelectionError<'tcx>>
     {
         let tcx = self.tcx();
 
@@ -2814,7 +2813,7 @@ fn confirm_builtin_unsize_candidate(&mut self,
             _ => bug!()
         };
 
-        Ok(VtableBuiltinData { ty: source, nested: nested })
+        Ok(VtableBuiltinData { nested: nested })
     }
 
     ///////////////////////////////////////////////////////////////////////////
index a83849898f5875b4dc4212406627bb42ec4107c5..003508fbbca12f9e533f2d61b31ae0df00a1b17c 100644 (file)
@@ -86,9 +86,9 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
     }
 }
 
-impl<'tcx, N: fmt::Debug> fmt::Debug for traits::VtableBuiltinData<'tcx, N> {
+impl<'tcx, N: fmt::Debug> fmt::Debug for traits::VtableBuiltinData<N> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "VtableBuiltin(ty={:?}, nested={:?})", self.ty, self.nested)
+        write!(f, "VtableBuiltin(nested={:?})", self.nested)
     }
 }
 
@@ -300,14 +300,7 @@ fn lift_to_tcx<'b, 'gcx>(&self, tcx: TyCtxt<'b, 'gcx, 'tcx>) -> Option<Self::Lif
                 })
             }
             traits::VtableParam(n) => Some(traits::VtableParam(n)),
-            traits::VtableBuiltin(traits::VtableBuiltinData { ty, nested }) => {
-                tcx.lift(&ty).map(|ty| {
-                    traits::VtableBuiltin(traits::VtableBuiltinData {
-                        ty,
-                        nested,
-                    })
-                })
-            }
+            traits::VtableBuiltin(n) => Some(traits::VtableBuiltin(n)),
             traits::VtableObject(traits::VtableObjectData {
                 upcast_trait_ref,
                 vtable_base,
@@ -385,10 +378,9 @@ fn super_visit_with<V: TypeVisitor<'tcx>>(&self, visitor: &mut V) -> bool {
     }
 }
 
-impl<'tcx, N: TypeFoldable<'tcx>> TypeFoldable<'tcx> for traits::VtableBuiltinData<'tcx, N> {
+impl<'tcx, N: TypeFoldable<'tcx>> TypeFoldable<'tcx> for traits::VtableBuiltinData<N> {
     fn super_fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F) -> Self {
         traits::VtableBuiltinData {
-            ty: self.ty.fold_with(folder),
             nested: self.nested.fold_with(folder),
         }
     }
index cb1a2f6b1077e69a83378aef80864ba0f611810a..040d96b0dcc7c994c5b4d07e5485995d82c24b2e 100644 (file)
@@ -275,7 +275,7 @@ fn downcast_subpath(&self, _path: Self::Path, _variant: usize) -> Option<Self::P
 /// Build a `Clone::clone` shim for `recvr_ty`. Here, `def_id` is `Clone::clone`.
 fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
                               def_id: DefId,
-                              recvr_ty: ty::Ty<'tcx>)
+                              rcvr_ty: ty::Ty<'tcx>)
                               -> Mir<'tcx>
 {
     let sig = tcx.fn_sig(def_id);
@@ -348,7 +348,7 @@ fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
         loc
     };
 
-    match recvr_ty.sty {
+    match rcvr_ty.sty {
         ty::TyArray(ty, len) => {
             let mut returns = Vec::new();
             for i in 0..len {
@@ -374,7 +374,7 @@ fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
                     Lvalue::Local(RETURN_POINTER),
                     Rvalue::Aggregate(
                         box AggregateKind::Array(ty),
-                        returns.into_iter().map(|loc| Operand::Consume(loc)).collect()
+                        returns.into_iter().map(Operand::Consume).collect()
                     )
                 )
             };
@@ -396,7 +396,7 @@ fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
                     Lvalue::Local(RETURN_POINTER),
                     Rvalue::Aggregate(
                         box AggregateKind::Tuple,
-                        returns.into_iter().map(|loc| Operand::Consume(loc)).collect()
+                        returns.into_iter().map(Operand::Consume).collect()
                     )
                 )
             };
index 1936775df0ab3d6e61733e542ec176e026917f12..401ee8cfaa8c917341e540c233d25073398e55d3 100644 (file)
@@ -143,9 +143,9 @@ fn resolve_associated_item<'a, 'tcx>(
                 substs: rcvr_substs
             }
         }
-        traits::VtableBuiltin(ref data) => {
+        traits::VtableBuiltin(..) => {
             Instance {
-                def: ty::InstanceDef::BuiltinShim(def_id, data.ty),
+                def: ty::InstanceDef::BuiltinShim(def_id, trait_ref.self_ty()),
                 substs: rcvr_substs
             }
         }