fn is_foreign_item(&self, did: DefId) -> bool;
fn is_dllimport_foreign_item(&self, def: DefId) -> bool;
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool;
+ fn is_exported_symbol(&self, def_id: DefId) -> bool;
// crate metadata
fn dylib_dependency_formats(&self, cnum: CrateNum)
fn is_foreign_item(&self, did: DefId) -> bool { bug!("is_foreign_item") }
fn is_dllimport_foreign_item(&self, id: DefId) -> bool { false }
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool { false }
+ fn is_exported_symbol(&self, def_id: DefId) -> bool { false }
// crate metadata
fn dylib_dependency_formats(&self, cnum: CrateNum)
crate_root.def_path_table.decode(&metadata)
});
+ let exported_symbols = crate_root.exported_symbols.decode(&metadata).collect();
+
let mut cmeta = cstore::CrateMetadata {
name: name,
extern_crate: Cell::new(None),
def_path_table: def_path_table,
+ exported_symbols: exported_symbols,
proc_macros: crate_root.macro_derive_registrar.map(|_| {
self.load_derive_macros(&crate_root, dylib.clone().map(|p| p.0), span)
}),
/// compilation support.
pub def_path_table: DefPathTable,
+ pub exported_symbols: FxHashSet<DefIndex>,
+
pub dep_kind: Cell<DepKind>,
pub source: CrateSource,
self.do_is_statically_included_foreign_item(def_id)
}
+ fn is_exported_symbol(&self, def_id: DefId) -> bool {
+ self.get_crate_data(def_id.krate).exported_symbols.contains(&def_id.index)
+ }
+
fn is_dllimport_foreign_item(&self, def_id: DefId) -> bool {
if def_id.krate == LOCAL_CRATE {
self.dllimport_foreign_items.borrow().contains(&def_id.index)
}
fn can_have_local_instance<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> bool {
- self.dep_graph.read(DepNode::MetaData(def));
- def.is_local() || self.get_crate_data(def.krate).can_have_local_instance(tcx, def.index)
+ if def.is_local() {
+ true
+ } else {
+ self.dep_graph.read(DepNode::MetaData(def));
+ self.get_crate_data(def.krate).can_have_local_instance(tcx, def.index)
+ }
}
fn crates(&self) -> Vec<CrateNum>
}
pub fn get_exported_symbols(&self) -> Vec<DefId> {
- self.root.exported_symbols.decode(self).map(|index| self.local_def_id(index)).collect()
+ self.exported_symbols.iter().map(|&index| self.local_def_id(index)).collect()
}
pub fn get_macro(&self, id: DefIndex) -> (ast::Name, MacroDef) {