diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-11-25 02:29:26 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-11-29 21:24:26 +0200 |
| commit | 3f338eed99265fe5e9a167abb2e1f4a7ff2ea101 (patch) | |
| tree | 56316a7d7a49ffcc54e0df26f3c320a65822f0a9 /src/librustc/traits | |
| parent | f50dbd580f3d5d88a300da540db3c85164bfd0de (diff) | |
| download | rust-3f338eed99265fe5e9a167abb2e1f4a7ff2ea101.tar.gz rust-3f338eed99265fe5e9a167abb2e1f4a7ff2ea101.zip | |
rustc: remove type information from TraitDef.
Diffstat (limited to 'src/librustc/traits')
| -rw-r--r-- | src/librustc/traits/error_reporting.rs | 6 | ||||
| -rw-r--r-- | src/librustc/traits/object_safety.rs | 16 | ||||
| -rw-r--r-- | src/librustc/traits/specialize/specialization_graph.rs | 14 |
3 files changed, 19 insertions, 17 deletions
diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs index 21009711cb1..f560308abe0 100644 --- a/src/librustc/traits/error_reporting.rs +++ b/src/librustc/traits/error_reporting.rs @@ -244,11 +244,11 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { for item in self.tcx.get_attrs(def_id).iter() { if item.check_name("rustc_on_unimplemented") { let err_sp = item.meta().span.substitute_dummy(span); - let def = self.tcx.lookup_trait_def(trait_ref.def_id); - let trait_str = def.trait_ref.to_string(); + let trait_str = self.tcx.item_path_str(trait_ref.def_id); if let Some(istring) = item.value_str() { let istring = &*istring.as_str(); - let generic_map = def.generics.types.iter().map(|param| { + let generics = self.tcx.item_generics(trait_ref.def_id); + let generic_map = generics.types.iter().map(|param| { (param.name.as_str().to_string(), trait_ref.substs.type_for_def(param).to_string()) }).collect::<FxHashMap<String, String>>(); diff --git a/src/librustc/traits/object_safety.rs b/src/librustc/traits/object_safety.rs index 0681be129b6..ceee6c236e4 100644 --- a/src/librustc/traits/object_safety.rs +++ b/src/librustc/traits/object_safety.rs @@ -21,7 +21,8 @@ use super::elaborate_predicates; use hir::def_id::DefId; use traits; -use ty::{self, ToPolyTraitRef, Ty, TyCtxt, TypeFoldable}; +use ty::{self, Ty, TyCtxt, TypeFoldable}; +use ty::subst::Substs; use syntax::ast; #[derive(Clone, Debug, PartialEq, Eq, Hash)] @@ -126,9 +127,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { } fn supertraits_reference_self(self, trait_def_id: DefId) -> bool { - let trait_def = self.lookup_trait_def(trait_def_id); - let trait_ref = trait_def.trait_ref.clone(); - let trait_ref = trait_ref.to_poly_trait_ref(); + let trait_ref = ty::Binder(ty::TraitRef { + def_id: trait_def_id, + substs: Substs::identity_for_item(self, trait_def_id) + }); let predicates = self.item_super_predicates(trait_def_id); predicates .predicates @@ -317,8 +319,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { // Compute supertraits of current trait lazily. if supertraits.is_none() { - let trait_def = self.lookup_trait_def(trait_def_id); - let trait_ref = ty::Binder(trait_def.trait_ref.clone()); + let trait_ref = ty::Binder(ty::TraitRef { + def_id: trait_def_id, + substs: Substs::identity_for_item(self, trait_def_id) + }); supertraits = Some(traits::supertraits(self, trait_ref).collect()); } diff --git a/src/librustc/traits/specialize/specialization_graph.rs b/src/librustc/traits/specialize/specialization_graph.rs index 5a6809f1fad..a41523f2def 100644 --- a/src/librustc/traits/specialize/specialization_graph.rs +++ b/src/librustc/traits/specialize/specialization_graph.rs @@ -297,18 +297,18 @@ impl<'a, 'gcx, 'tcx> Node { } } -pub struct Ancestors<'a, 'tcx: 'a> { - trait_def: &'a TraitDef<'tcx>, +pub struct Ancestors<'a> { + trait_def: &'a TraitDef, current_source: Option<Node>, } -impl<'a, 'tcx> Iterator for Ancestors<'a, 'tcx> { +impl<'a> Iterator for Ancestors<'a> { type Item = Node; fn next(&mut self) -> Option<Node> { let cur = self.current_source.take(); if let Some(Node::Impl(cur_impl)) = cur { let parent = self.trait_def.specialization_graph.borrow().parent(cur_impl); - if parent == self.trait_def.def_id() { + if parent == self.trait_def.def_id { self.current_source = Some(Node::Trait(parent)); } else { self.current_source = Some(Node::Impl(parent)); @@ -332,7 +332,7 @@ impl<T> NodeItem<T> { } } -impl<'a, 'gcx, 'tcx> Ancestors<'a, 'tcx> { +impl<'a, 'gcx, 'tcx> Ancestors<'a> { /// Search the items from the given ancestors, returning each definition /// with the given name and the given kind. #[inline] // FIXME(#35870) Avoid closures being unexported due to impl Trait. @@ -347,9 +347,7 @@ impl<'a, 'gcx, 'tcx> Ancestors<'a, 'tcx> { /// Walk up the specialization ancestors of a given impl, starting with that /// impl itself. -pub fn ancestors<'a, 'tcx>(trait_def: &'a TraitDef<'tcx>, - start_from_impl: DefId) - -> Ancestors<'a, 'tcx> { +pub fn ancestors<'a>(trait_def: &'a TraitDef, start_from_impl: DefId) -> Ancestors<'a> { Ancestors { trait_def: trait_def, current_source: Some(Node::Impl(start_from_impl)), |
