NodePat(&'hir Pat),
NodeBlock(&'hir Block),
NodeLocal(&'hir Local),
+ NodeMacroDef(&'hir MacroDef),
/// NodeStructCtor represents a tuple struct.
NodeStructCtor(&'hir VariantData),
EntryVisibility(NodeId, DepNodeIndex, &'hir Visibility),
EntryLocal(NodeId, DepNodeIndex, &'hir Local),
+ EntryMacroDef(DepNodeIndex, &'hir MacroDef),
+
/// Roots for node trees. The DepNodeIndex is the dependency node of the
/// crate's root module.
RootCrate(DepNodeIndex),
EntryLocal(id, _, _) => id,
NotPresent |
+ EntryMacroDef(..) |
RootCrate(_) => return None,
})
}
EntryTyParam(_, _, n) => NodeTyParam(n),
EntryVisibility(_, _, n) => NodeVisibility(n),
EntryLocal(_, _, n) => NodeLocal(n),
+ EntryMacroDef(_, n) => NodeMacroDef(n),
NotPresent |
RootCrate(_) => return None
EntryVisibility(_, dep_node_index, _) |
EntryExpr(_, dep_node_index, _) |
EntryLocal(_, dep_node_index, _) |
+ EntryMacroDef(dep_node_index, _) |
RootCrate(dep_node_index) => {
self.dep_graph.read_index(dep_node_index);
}
NotPresent => {
- // Some nodes, notably macro definitions, are not
- // present in the map for whatever reason, but
- // they *do* have def-ids. So if we encounter an
- // empty hole, check for that case.
- if let Some(def_index) = self.definitions.opt_def_index(id) {
- let def_path_hash = self.definitions.def_path_hash(def_index);
- self.dep_graph.read(def_path_hash.to_dep_node(DepKind::Hir));
- } else {
- bug!("called HirMap::read() with invalid NodeId")
- }
+ bug!("called HirMap::read() with invalid NodeId")
}
}
}
Some(EntryVisibility(_, _, &Visibility::Restricted { ref path, .. })) => path.span,
Some(EntryVisibility(_, _, v)) => bug!("unexpected Visibility {:?}", v),
Some(EntryLocal(_, _, local)) => local.span,
+ Some(EntryMacroDef(_, macro_def)) => macro_def.span,
Some(RootCrate(_)) => self.forest.krate.span,
Some(NotPresent) | None => {
impl Named for TraitItem { fn name(&self) -> Name { self.name } }
impl Named for ImplItem { fn name(&self) -> Name { self.name } }
-pub fn map_crate<'hir>(forest: &'hir mut Forest,
+pub fn map_crate<'hir>(sess: &::session::Session,
+ cstore: &::middle::cstore::CrateStore,
+ forest: &'hir mut Forest,
definitions: &'hir Definitions)
-> Map<'hir> {
let map = {
+ let hcx = ::ich::StableHashingContext::new(sess, &forest.krate, definitions, cstore);
+
let mut collector = NodeCollector::root(&forest.krate,
&forest.dep_graph,
- &definitions);
+ &definitions,
+ hcx);
intravisit::walk_crate(&mut collector, &forest.krate);
- collector.into_map()
+
+ let crate_disambiguator = sess.local_crate_disambiguator().as_str();
+ collector.finalize_and_compute_crate_hash(&crate_disambiguator)
};
if log_enabled!(::log::LogLevel::Debug) {
// printing.
NodeStructCtor(_) => bug!("cannot print isolated StructCtor"),
NodeLocal(a) => self.print_local_decl(&a),
+ NodeMacroDef(_) => bug!("cannot print MacroDef"),
}
}
}
Some(NodeVisibility(ref vis)) => {
format!("visibility {:?}{}", vis, id_str)
}
+ Some(NodeMacroDef(_)) => {
+ format!("macro {}{}", path_str(), id_str)
+ }
None => {
format!("unknown node{}", id_str)
}