Allocate HIR id counters for use trees in MiscCollector

This commit is contained in:
John Kåre Alsaker 2019-03-16 07:16:25 +01:00
parent 7dd8b776b5
commit cb4ac714e1
2 changed files with 43 additions and 16 deletions

View file

@ -361,9 +361,40 @@ impl<'a> LoweringContext<'a> {
lctx: &'lcx mut LoweringContext<'interner>,
}
impl MiscCollector<'_, '_> {
fn allocate_use_tree_hir_id_counters(
&mut self,
tree: &UseTree,
owner: DefIndex,
) {
match tree.kind {
UseTreeKind::Simple(_, id1, id2) => {
for &id in &[id1, id2] {
self.lctx.resolver.definitions().create_def_with_parent(
owner,
id,
DefPathData::Misc,
DefIndexAddressSpace::High,
Mark::root(),
tree.prefix.span,
);
self.lctx.allocate_hir_id_counter(id, &tree);
}
}
UseTreeKind::Glob => (),
UseTreeKind::Nested(ref trees) => {
for &(ref use_tree, id) in trees {
let hir_id = self.lctx.allocate_hir_id_counter(id, &use_tree).hir_id;
self.allocate_use_tree_hir_id_counters(use_tree, hir_id.owner);
}
}
}
}
}
impl<'lcx, 'interner> Visitor<'lcx> for MiscCollector<'lcx, 'interner> {
fn visit_item(&mut self, item: &'lcx Item) {
self.lctx.allocate_hir_id_counter(item.id, item);
let hir_id = self.lctx.allocate_hir_id_counter(item.id, item).hir_id;
match item.node {
ItemKind::Struct(_, ref generics)
@ -383,6 +414,9 @@ impl<'a> LoweringContext<'a> {
.count();
self.lctx.type_def_lifetime_params.insert(def_id, count);
}
ItemKind::Use(ref use_tree) => {
self.allocate_use_tree_hir_id_counters(use_tree, hir_id.owner);
}
_ => {}
}
visit::walk_item(self, item);
@ -517,6 +551,8 @@ impl<'a> LoweringContext<'a> {
fn insert_item(&mut self, item: hir::Item) {
let id = item.hir_id;
// FIXME: Use debug_asset-rt
assert_eq!(id.local_id, hir::ItemLocalId::from_u32(0));
self.items.insert(id, item);
self.modules.get_mut(&self.current_module).unwrap().items.insert(id);
}
@ -3065,7 +3101,6 @@ impl<'a> LoweringContext<'a> {
}
}
let parent_def_index = self.current_hir_id_owner.last().unwrap().0;
let mut defs = self.expect_full_def_from_use(id);
// We want to return *something* from this function, so hold onto the first item
// for later.
@ -3084,14 +3119,6 @@ impl<'a> LoweringContext<'a> {
seg.id = self.sess.next_node_id();
}
let span = path.span;
self.resolver.definitions().create_def_with_parent(
parent_def_index,
new_node_id,
DefPathData::Misc,
DefIndexAddressSpace::High,
Mark::root(),
span);
self.allocate_hir_id_counter(new_node_id, &path);
self.with_hir_id_owner(new_node_id, |this| {
let new_id = this.lower_node_id(new_node_id);
@ -3173,8 +3200,6 @@ impl<'a> LoweringContext<'a> {
// Add all the nested `PathListItem`s to the HIR.
for &(ref use_tree, id) in trees {
self.allocate_hir_id_counter(id, &use_tree);
let LoweredNodeId {
node_id: new_id,
hir_id: new_hir_id,
@ -3469,9 +3494,11 @@ impl<'a> LoweringContext<'a> {
_ => smallvec![i.id],
};
node_ids.into_iter()
.map(|node_id| hir::ItemId { id: self.lower_node_id(node_id).hir_id })
.collect()
node_ids.into_iter().map(|node_id| hir::ItemId {
id: self.lower_node_id_generic(node_id, |_| {
panic!("expected node_id to be lowered already {:#?}", i)
}).hir_id
}).collect()
}
fn lower_item_id_use_tree(&mut self,

View file

@ -292,7 +292,7 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
fn visit_ty(&mut self, ty: &'tcx hir::Ty) {
match ty.node {
TyKind::Def(item_id, _) => {
let item = self.tcx.hir().expect_item(item_id.id);
let item = self.tcx.hir().expect_item_by_hir_id(item_id.id);
intravisit::walk_item(self, item);
}
_ => ()