X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_metadata%2Fcstore.rs;h=3419d121088282a542ba2e193255e7fdc7152a14;hb=6f4ab9458a7ad06c8ce630604f533c8c0c0acef4;hp=5066b927c11526214029b6f3667c5cedb3a67c53;hpb=13eb0ec9f17c89a3cb06a8f3ae627c076839fa52;p=rust.git diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index 5066b927c11..3419d121088 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -13,9 +13,9 @@ use schema::{self, Tracked}; -use rustc::dep_graph::{DepGraph, DepNode, GlobalMetaDataKind}; +use rustc::dep_graph::DepGraph; use rustc::hir::def_id::{CRATE_DEF_INDEX, LOCAL_CRATE, CrateNum, DefIndex, DefId}; -use rustc::hir::map::definitions::DefPathTable; +use rustc::hir::map::definitions::{DefPathTable, GlobalMetaDataKind}; use rustc::hir::svh::Svh; use rustc::middle::cstore::{DepKind, ExternCrate, MetadataLoader}; use rustc_back::PanicStrategy; @@ -34,7 +34,7 @@ pub use rustc::middle::cstore::NativeLibraryKind::*; pub use rustc::middle::cstore::{CrateSource, LinkMeta, LibSource}; -pub use cstore_impl::provide; +pub use cstore_impl::{provide, provide_local}; // A map from external crate numbers (as decoded from some crate file) to // local crate numbers (as generated during this session). Each external @@ -114,7 +114,7 @@ pub fn new(dep_graph: &DepGraph, metadata_loader: Box) -> CStore statically_included_foreign_items: RefCell::new(FxHashSet()), dllimport_foreign_items: RefCell::new(FxHashSet()), visible_parent_map: RefCell::new(FxHashMap()), - metadata_loader: metadata_loader, + metadata_loader, } } @@ -255,6 +255,13 @@ pub fn do_is_statically_included_foreign_item(&self, def_id: DefId) -> bool { pub fn do_extern_mod_stmt_cnum(&self, emod_id: ast::NodeId) -> Option { self.extern_mod_crate_map.borrow().get(&emod_id).cloned() } + + pub fn read_dep_node(&self, def_id: DefId) { + use rustc::middle::cstore::CrateStore; + let def_path_hash = self.def_path_hash(def_id); + let dep_node = def_path_hash.to_dep_node(::rustc::dep_graph::DepKind::MetaData); + self.dep_graph.read(dep_node); + } } impl CrateMetadata { @@ -268,16 +275,27 @@ pub fn disambiguator(&self) -> Symbol { self.root.disambiguator } - pub fn is_allocator(&self, dep_graph: &DepGraph) -> bool { - let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); - attr::contains_name(&attrs, "allocator") - } - pub fn needs_allocator(&self, dep_graph: &DepGraph) -> bool { let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); attr::contains_name(&attrs, "needs_allocator") } + pub fn has_global_allocator(&self, dep_graph: &DepGraph) -> bool { + let dep_node = self.metadata_dep_node(GlobalMetaDataKind::Krate); + self.root + .has_global_allocator + .get(dep_graph, dep_node) + .clone() + } + + pub fn has_default_lib_allocator(&self, dep_graph: &DepGraph) -> bool { + let dep_node = self.metadata_dep_node(GlobalMetaDataKind::Krate); + self.root + .has_default_lib_allocator + .get(dep_graph, dep_node) + .clone() + } + pub fn is_panic_runtime(&self, dep_graph: &DepGraph) -> bool { let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); attr::contains_name(&attrs, "panic_runtime") @@ -298,18 +316,18 @@ pub fn is_sanitizer_runtime(&self, dep_graph: &DepGraph) -> bool { attr::contains_name(&attrs, "sanitizer_runtime") } + pub fn is_profiler_runtime(&self, dep_graph: &DepGraph) -> bool { + let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); + attr::contains_name(&attrs, "profiler_runtime") + } + pub fn is_no_builtins(&self, dep_graph: &DepGraph) -> bool { let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); attr::contains_name(&attrs, "no_builtins") } pub fn panic_strategy(&self, dep_graph: &DepGraph) -> PanicStrategy { - let def_id = DefId { - krate: self.cnum, - index: CRATE_DEF_INDEX, - }; - let dep_node = DepNode::GlobalMetaData(def_id, GlobalMetaDataKind::Krate); - + let dep_node = self.metadata_dep_node(GlobalMetaDataKind::Krate); self.root .panic_strategy .get(dep_graph, dep_node)