Skip to content

Commit 02c7b11

Browse files
metadata: Add is_exported_symbol() method to CrateStore.
1 parent 4dca459 commit 02c7b11

File tree

5 files changed

+18
-3
lines changed

5 files changed

+18
-3
lines changed

src/librustc/middle/cstore.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ pub trait CrateStore<'tcx> {
211211
fn is_foreign_item(&self, did: DefId) -> bool;
212212
fn is_dllimport_foreign_item(&self, def: DefId) -> bool;
213213
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool;
214+
fn is_exported_symbol(&self, def_id: DefId) -> bool;
214215

215216
// crate metadata
216217
fn dylib_dependency_formats(&self, cnum: CrateNum)
@@ -368,6 +369,7 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
368369
fn is_foreign_item(&self, did: DefId) -> bool { bug!("is_foreign_item") }
369370
fn is_dllimport_foreign_item(&self, id: DefId) -> bool { false }
370371
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool { false }
372+
fn is_exported_symbol(&self, def_id: DefId) -> bool { false }
371373

372374
// crate metadata
373375
fn dylib_dependency_formats(&self, cnum: CrateNum)

src/librustc_metadata/creader.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,13 @@ impl<'a> CrateLoader<'a> {
302302
crate_root.def_path_table.decode(&metadata)
303303
});
304304

305+
let exported_symbols = crate_root.exported_symbols.decode(&metadata).collect();
306+
305307
let mut cmeta = cstore::CrateMetadata {
306308
name: name,
307309
extern_crate: Cell::new(None),
308310
def_path_table: def_path_table,
311+
exported_symbols: exported_symbols,
309312
proc_macros: crate_root.macro_derive_registrar.map(|_| {
310313
self.load_derive_macros(&crate_root, dylib.clone().map(|p| p.0), span)
311314
}),

src/librustc_metadata/cstore.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ pub struct CrateMetadata {
8080
/// compilation support.
8181
pub def_path_table: DefPathTable,
8282

83+
pub exported_symbols: FxHashSet<DefIndex>,
84+
8385
pub dep_kind: Cell<DepKind>,
8486
pub source: CrateSource,
8587

src/librustc_metadata/cstore_impl.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
226226
self.do_is_statically_included_foreign_item(def_id)
227227
}
228228

229+
fn is_exported_symbol(&self, def_id: DefId) -> bool {
230+
self.get_crate_data(def_id.krate).exported_symbols.contains(&def_id.index)
231+
}
232+
229233
fn is_dllimport_foreign_item(&self, def_id: DefId) -> bool {
230234
if def_id.krate == LOCAL_CRATE {
231235
self.dllimport_foreign_items.borrow().contains(&def_id.index)
@@ -467,8 +471,12 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
467471
}
468472

469473
fn can_have_local_instance<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> bool {
470-
self.dep_graph.read(DepNode::MetaData(def));
471-
def.is_local() || self.get_crate_data(def.krate).can_have_local_instance(tcx, def.index)
474+
if def.is_local() {
475+
true
476+
} else {
477+
self.dep_graph.read(DepNode::MetaData(def));
478+
self.get_crate_data(def.krate).can_have_local_instance(tcx, def.index)
479+
}
472480
}
473481

474482
fn crates(&self) -> Vec<CrateNum>

src/librustc_metadata/decoder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,7 @@ impl<'a, 'tcx> CrateMetadata {
10311031
}
10321032

10331033
pub fn get_exported_symbols(&self) -> Vec<DefId> {
1034-
self.root.exported_symbols.decode(self).map(|index| self.local_def_id(index)).collect()
1034+
self.exported_symbols.iter().map(|&index| self.local_def_id(index)).collect()
10351035
}
10361036

10371037
pub fn get_macro(&self, id: DefIndex) -> (ast::Name, MacroDef) {

0 commit comments

Comments
 (0)