Store ForeignItem in a side table.
This commit is contained in:
parent
65ecc481fa
commit
419a9186a4
46 changed files with 270 additions and 55 deletions
|
|
@ -112,6 +112,7 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
|
|||
items: _,
|
||||
trait_items: _,
|
||||
impl_items: _,
|
||||
foreign_items: _,
|
||||
bodies: _,
|
||||
trait_impls: _,
|
||||
body_ids: _,
|
||||
|
|
@ -319,6 +320,10 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
|||
self.visit_impl_item(self.krate.impl_item(item_id));
|
||||
}
|
||||
|
||||
fn visit_nested_foreign_item(&mut self, foreign_id: ForeignItemId) {
|
||||
self.visit_foreign_item(self.krate.foreign_item(foreign_id));
|
||||
}
|
||||
|
||||
fn visit_nested_body(&mut self, id: BodyId) {
|
||||
self.visit_body(self.krate.body(id));
|
||||
}
|
||||
|
|
@ -351,11 +356,17 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
|||
});
|
||||
}
|
||||
|
||||
fn visit_foreign_item(&mut self, foreign_item: &'hir ForeignItem<'hir>) {
|
||||
self.insert(foreign_item.span, foreign_item.hir_id, Node::ForeignItem(foreign_item));
|
||||
fn visit_foreign_item(&mut self, fi: &'hir ForeignItem<'hir>) {
|
||||
debug_assert_eq!(
|
||||
fi.hir_id.owner,
|
||||
self.definitions.opt_hir_id_to_local_def_id(fi.hir_id).unwrap()
|
||||
);
|
||||
self.with_dep_node_owner(fi.hir_id.owner, fi, |this, hash| {
|
||||
this.insert_with_hash(fi.span, fi.hir_id, Node::ForeignItem(fi), hash);
|
||||
|
||||
self.with_parent(foreign_item.hir_id, |this| {
|
||||
intravisit::walk_foreign_item(this, foreign_item);
|
||||
this.with_parent(fi.hir_id, |this| {
|
||||
intravisit::walk_foreign_item(this, fi);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -309,6 +309,13 @@ impl<'hir> Map<'hir> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn foreign_item(&self, id: ForeignItemId) -> &'hir ForeignItem<'hir> {
|
||||
match self.find(id.hir_id).unwrap() {
|
||||
Node::ForeignItem(item) => item,
|
||||
_ => bug!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn body(&self, id: BodyId) -> &'hir Body<'hir> {
|
||||
self.tcx.hir_owner_nodes(id.hir_id.owner).unwrap().bodies.get(&id.hir_id.local_id).unwrap()
|
||||
}
|
||||
|
|
@ -470,6 +477,10 @@ impl<'hir> Map<'hir> {
|
|||
for id in &module.impl_items {
|
||||
visitor.visit_impl_item(self.expect_impl_item(id.hir_id));
|
||||
}
|
||||
|
||||
for id in &module.foreign_items {
|
||||
visitor.visit_foreign_item(self.expect_foreign_item(id.hir_id));
|
||||
}
|
||||
}
|
||||
|
||||
/// Retrieves the `Node` corresponding to `id`, panicking if it cannot be found.
|
||||
|
|
@ -937,6 +948,10 @@ impl<'hir> intravisit::Map<'hir> for Map<'hir> {
|
|||
fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir> {
|
||||
self.impl_item(id)
|
||||
}
|
||||
|
||||
fn foreign_item(&self, id: ForeignItemId) -> &'hir ForeignItem<'hir> {
|
||||
self.foreign_item(id)
|
||||
}
|
||||
}
|
||||
|
||||
trait Named {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue