1
Fork 0

rustc_metadata: split the Def description of a DefId from item_children.

This commit is contained in:
Eduard Burtescu 2016-09-15 11:05:45 +03:00
parent adddfccf2b
commit 24aef24e1a
9 changed files with 95 additions and 109 deletions

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use rustc::middle::cstore::{CrateStore, ChildItem};
use rustc::middle::cstore::CrateStore;
use rustc::middle::privacy::{AccessLevels, AccessLevel};
use rustc::hir::def::Def;
use rustc::hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId};
@ -64,38 +64,27 @@ impl<'a, 'b, 'tcx> LibEmbargoVisitor<'a, 'b, 'tcx> {
}
}
pub fn visit_mod(&mut self, did: DefId) {
for item in self.cstore.item_children(did) {
match item.def {
Def::Mod(did) |
Def::Trait(did) |
Def::Struct(did) |
Def::Union(did) |
Def::Enum(did) |
Def::TyAlias(did) |
Def::Fn(did) |
Def::Method(did) |
Def::Static(did, _) |
Def::Const(did) => self.visit_item(did, item),
_ => {}
}
pub fn visit_mod(&mut self, def_id: DefId) {
for item in self.cstore.item_children(def_id) {
self.visit_item(item.def_id);
}
}
fn visit_item(&mut self, did: DefId, item: ChildItem) {
let inherited_item_level = if item.vis == Visibility::Public {
fn visit_item(&mut self, def_id: DefId) {
let vis = self.cstore.visibility(def_id);
let inherited_item_level = if vis == Visibility::Public {
self.prev_level
} else {
None
};
let item_level = self.update(did, inherited_item_level);
let item_level = self.update(def_id, inherited_item_level);
if let Def::Mod(did) = item.def {
if let Some(Def::Mod(_)) = self.cstore.describe_def(def_id) {
let orig_level = self.prev_level;
self.prev_level = item_level;
self.visit_mod(did);
self.visit_mod(def_id);
self.prev_level = orig_level;
}
}