diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-12-04 04:21:06 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-12-28 11:21:45 +0200 |
| commit | 864928297d0fc0675c5eae62a58d8488941d58cf (patch) | |
| tree | 1ea528de95d704bc8ebfde9af807287477d5d3d9 /src/librustc/middle | |
| parent | 6ebb6fdbee7f0d250e50e4d84d9aede293cf3bb3 (diff) | |
| download | rust-864928297d0fc0675c5eae62a58d8488941d58cf.tar.gz rust-864928297d0fc0675c5eae62a58d8488941d58cf.zip | |
rustc: separate TraitItem from their parent Item, just like ImplItem.
Diffstat (limited to 'src/librustc/middle')
| -rw-r--r-- | src/librustc/middle/cstore.rs | 4 | ||||
| -rw-r--r-- | src/librustc/middle/dead.rs | 23 | ||||
| -rw-r--r-- | src/librustc/middle/entry.rs | 5 | ||||
| -rw-r--r-- | src/librustc/middle/intrinsicck.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/lang_items.rs | 4 | ||||
| -rw-r--r-- | src/librustc/middle/reachable.rs | 18 | ||||
| -rw-r--r-- | src/librustc/middle/resolve_lifetime.rs | 2 |
7 files changed, 36 insertions, 22 deletions
diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index d0003693eef..7d570596386 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -183,9 +183,9 @@ impl<'a> InlinedItemRef<'a> { _tcx: TyCtxt) -> InlinedItemRef<'a> { let (body, args) = match item.node { - hir::ConstTraitItem(_, Some(ref body)) => + hir::TraitItemKind::Const(_, Some(ref body)) => (&**body, Vec::new()), - hir::ConstTraitItem(_, None) => { + hir::TraitItemKind::Const(_, None) => { bug!("InlinedItemRef::from_trait_item called for const without body") }, _ => bug!("InlinedItemRef::from_trait_item wrong kind") diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 1c5dd97b74b..2206336164a 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -328,11 +328,12 @@ impl<'v, 'k> ItemLikeVisitor<'v> for LifeSeeder<'k> { self.worklist.extend(enum_def.variants.iter() .map(|variant| variant.node.data.id())); } - hir::ItemTrait(.., ref trait_items) => { - for trait_item in trait_items { + hir::ItemTrait(.., ref trait_item_refs) => { + for trait_item_ref in trait_item_refs { + let trait_item = self.krate.trait_item(trait_item_ref.id); match trait_item.node { - hir::ConstTraitItem(_, Some(_)) | - hir::MethodTraitItem(_, Some(_)) => { + hir::TraitItemKind::Const(_, Some(_)) | + hir::TraitItemKind::Method(_, Some(_)) => { if has_allow_dead_code_or_lang_attr(&trait_item.attrs) { self.worklist.push(trait_item.id); } @@ -354,6 +355,10 @@ impl<'v, 'k> ItemLikeVisitor<'v> for LifeSeeder<'k> { } } + fn visit_trait_item(&mut self, _item: &hir::TraitItem) { + // ignore: we are handling this in `visit_item` above + } + fn visit_impl_item(&mut self, _item: &hir::ImplItem) { // ignore: we are handling this in `visit_item` above } @@ -567,15 +572,15 @@ impl<'a, 'tcx> Visitor<'tcx> for DeadVisitor<'a, 'tcx> { // Overwrite so that we don't warn the trait item itself. fn visit_trait_item(&mut self, trait_item: &'tcx hir::TraitItem) { match trait_item.node { - hir::ConstTraitItem(_, Some(ref body)) => { + hir::TraitItemKind::Const(_, Some(ref body)) => { intravisit::walk_expr(self, body) } - hir::MethodTraitItem(_, Some(body_id)) => { + hir::TraitItemKind::Method(_, Some(body_id)) => { self.visit_body(body_id) } - hir::ConstTraitItem(_, None) | - hir::MethodTraitItem(_, None) | - hir::TypeTraitItem(..) => {} + hir::TraitItemKind::Const(_, None) | + hir::TraitItemKind::Method(_, None) | + hir::TraitItemKind::Type(..) => {} } } } diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index e927843a984..f2e46d4cbc9 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -17,7 +17,7 @@ use syntax::ast::NodeId; use syntax::attr; use syntax::entry::EntryPointType; use syntax_pos::Span; -use hir::{Item, ItemFn, ImplItem}; +use hir::{Item, ItemFn, ImplItem, TraitItem}; use hir::itemlikevisit::ItemLikeVisitor; struct EntryContext<'a, 'tcx: 'a> { @@ -47,6 +47,9 @@ impl<'a, 'tcx> ItemLikeVisitor<'tcx> for EntryContext<'a, 'tcx> { find_item(item, self, at_root); } + fn visit_trait_item(&mut self, _trait_item: &'tcx TraitItem) { + // entry fn is never a trait item + } fn visit_impl_item(&mut self, _impl_item: &'tcx ImplItem) { // entry fn is never an impl item diff --git a/src/librustc/middle/intrinsicck.rs b/src/librustc/middle/intrinsicck.rs index 2357549c82e..1c31e1800ee 100644 --- a/src/librustc/middle/intrinsicck.rs +++ b/src/librustc/middle/intrinsicck.rs @@ -132,7 +132,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ItemVisitor<'a, 'tcx> { } fn visit_trait_item(&mut self, item: &'tcx hir::TraitItem) { - if let hir::ConstTraitItem(_, Some(ref expr)) = item.node { + if let hir::TraitItemKind::Const(_, Some(ref expr)) = item.node { self.visit_const(item.id, expr); } else { intravisit::walk_trait_item(self, item); diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 029a1d66add..4cae5b370eb 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -140,6 +140,10 @@ impl<'a, 'v, 'tcx> ItemLikeVisitor<'v> for LanguageItemCollector<'a, 'tcx> { } } + fn visit_trait_item(&mut self, _trait_item: &hir::TraitItem) { + // at present, lang items are always items, not trait items + } + fn visit_impl_item(&mut self, _impl_item: &hir::ImplItem) { // at present, lang items are always items, not impl items } diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs index 2c4710f1e45..25f70d04819 100644 --- a/src/librustc/middle/reachable.rs +++ b/src/librustc/middle/reachable.rs @@ -166,9 +166,9 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { } Some(ast_map::NodeTraitItem(trait_method)) => { match trait_method.node { - hir::ConstTraitItem(_, ref default) => default.is_some(), - hir::MethodTraitItem(_, ref body) => body.is_some(), - hir::TypeTraitItem(..) => false, + hir::TraitItemKind::Const(_, ref default) => default.is_some(), + hir::TraitItemKind::Method(_, ref body) => body.is_some(), + hir::TraitItemKind::Type(..) => false, } } Some(ast_map::NodeImplItem(impl_item)) => { @@ -274,17 +274,17 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { } ast_map::NodeTraitItem(trait_method) => { match trait_method.node { - hir::ConstTraitItem(_, None) | - hir::MethodTraitItem(_, None) => { + hir::TraitItemKind::Const(_, None) | + hir::TraitItemKind::Method(_, None) => { // Keep going, nothing to get exported } - hir::ConstTraitItem(_, Some(ref body)) => { + hir::TraitItemKind::Const(_, Some(ref body)) => { self.visit_expr(body); } - hir::MethodTraitItem(_, Some(body_id)) => { + hir::TraitItemKind::Method(_, Some(body_id)) => { self.visit_body(body_id); } - hir::TypeTraitItem(..) => {} + hir::TraitItemKind::Type(..) => {} } } ast_map::NodeImplItem(impl_item) => { @@ -358,6 +358,8 @@ impl<'a, 'tcx: 'a> ItemLikeVisitor<'tcx> for CollectPrivateImplItemsVisitor<'a, } } + fn visit_trait_item(&mut self, _trait_item: &hir::TraitItem) {} + fn visit_impl_item(&mut self, _impl_item: &hir::ImplItem) { // processed in visit_item above } diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index c5b03a4a32a..443770e61b6 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -266,7 +266,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> { // methods in an impl can reuse label names. let saved = replace(&mut self.labels_in_fn, vec![]); - if let hir::MethodTraitItem(ref sig, None) = trait_item.node { + if let hir::TraitItemKind::Method(ref sig, None) = trait_item.node { self.visit_early_late( trait_item.id, &sig.decl, &sig.generics, |
