Skip to content

Commit f5baad2

Browse files
committed
rustc_metadata: Remove resolutions for extern crate items from CStore
Use a more traditional scheme with providing them as a resolver output
1 parent e843d86 commit f5baad2

File tree

9 files changed

+16
-23
lines changed

9 files changed

+16
-23
lines changed

src/librustc/middle/cstore.rs

-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ pub trait CrateStore {
214214
fn crate_is_private_dep_untracked(&self, cnum: CrateNum) -> bool;
215215
fn crate_disambiguator_untracked(&self, cnum: CrateNum) -> CrateDisambiguator;
216216
fn crate_hash_untracked(&self, cnum: CrateNum) -> Svh;
217-
fn extern_mod_stmt_cnum_untracked(&self, emod_id: ast::NodeId) -> Option<CrateNum>;
218217
fn item_generics_cloned_untracked(&self, def: DefId, sess: &Session) -> ty::Generics;
219218
fn postorder_cnums_untracked(&self) -> Vec<CrateNum>;
220219

src/librustc/ty/context.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use crate::ty::subst::{UserSubsts, GenericArgKind};
4343
use crate::ty::{BoundVar, BindingMode};
4444
use crate::ty::CanonicalPolyFnSig;
4545
use crate::util::common::ErrorReported;
46-
use crate::util::nodemap::{DefIdMap, DefIdSet, ItemLocalMap, ItemLocalSet};
46+
use crate::util::nodemap::{DefIdMap, DefIdSet, ItemLocalMap, ItemLocalSet, NodeMap};
4747
use crate::util::nodemap::{FxHashMap, FxHashSet};
4848
use crate::util::profiling::SelfProfilerRef;
4949

@@ -1051,6 +1051,9 @@ pub struct GlobalCtxt<'tcx> {
10511051
/// Common consts, pre-interned for your convenience.
10521052
pub consts: CommonConsts<'tcx>,
10531053

1054+
/// Resolutions of `extern crate` items produced by resolver.
1055+
extern_crate_map: NodeMap<CrateNum>,
1056+
10541057
/// Map indicating what traits are in scope for places where this
10551058
/// is relevant; generated by resolve.
10561059
trait_map: FxHashMap<DefIndex,
@@ -1274,6 +1277,7 @@ impl<'tcx> TyCtxt<'tcx> {
12741277
types: common_types,
12751278
lifetimes: common_lifetimes,
12761279
consts: common_consts,
1280+
extern_crate_map: resolutions.extern_crate_map,
12771281
trait_map,
12781282
export_map: resolutions.export_map.into_iter().map(|(k, v)| {
12791283
let exports: Vec<_> = v.into_iter().map(|e| {
@@ -2951,7 +2955,7 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
29512955
};
29522956
providers.extern_mod_stmt_cnum = |tcx, id| {
29532957
let id = tcx.hir().as_local_node_id(id).unwrap();
2954-
tcx.cstore.extern_mod_stmt_cnum_untracked(id)
2958+
tcx.extern_crate_map.get(&id).cloned()
29552959
};
29562960
providers.all_crate_nums = |tcx, cnum| {
29572961
assert_eq!(cnum, LOCAL_CRATE);

src/librustc/ty/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use crate::ty::subst::{Subst, InternalSubsts, SubstsRef};
2828
use crate::ty::util::{IntTypeExt, Discr};
2929
use crate::ty::walk::TypeWalker;
3030
use crate::util::captures::Captures;
31-
use crate::util::nodemap::{NodeSet, DefIdMap, FxHashMap};
31+
use crate::util::nodemap::{NodeMap, NodeSet, DefIdMap, FxHashMap};
3232
use arena::SyncDroplessArena;
3333
use crate::session::DataTypeKind;
3434

@@ -121,6 +121,7 @@ mod sty;
121121

122122
#[derive(Clone)]
123123
pub struct Resolutions {
124+
pub extern_crate_map: NodeMap<CrateNum>,
124125
pub trait_map: TraitMap,
125126
pub maybe_unused_trait_imports: NodeSet,
126127
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,

src/librustc_interface/passes.rs

+2
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ impl ExpansionResult {
169169
ExpansionResult {
170170
defs: Steal::new(resolver.definitions),
171171
resolutions: Steal::new(Resolutions {
172+
extern_crate_map: resolver.extern_crate_map,
172173
export_map: resolver.export_map,
173174
trait_map: resolver.trait_map,
174175
glob_map: resolver.glob_map,
@@ -187,6 +188,7 @@ impl ExpansionResult {
187188
ExpansionResult {
188189
defs: Steal::new(resolver.definitions.clone()),
189190
resolutions: Steal::new(Resolutions {
191+
extern_crate_map: resolver.extern_crate_map.clone(),
190192
export_map: resolver.export_map.clone(),
191193
trait_map: resolver.trait_map.clone(),
192194
glob_map: resolver.glob_map.clone(),

src/librustc_metadata/creader.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,6 @@ impl<'a> CrateLoader<'a> {
10041004
},
10051005
&mut FxHashSet::default(),
10061006
);
1007-
self.cstore.add_extern_mod_stmt_cnum(item.id, cnum);
10081007
cnum
10091008
}
10101009
_ => bug!(),

src/librustc_metadata/cstore.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc::hir::map::definitions::DefPathTable;
88
use rustc::middle::cstore::{CrateSource, DepKind, ExternCrate, MetadataLoader};
99
use rustc::mir::interpret::AllocDecodingState;
1010
use rustc_index::vec::IndexVec;
11-
use rustc::util::nodemap::{FxHashMap, NodeMap};
11+
use rustc::util::nodemap::FxHashMap;
1212
use rustc_data_structures::sync::{Lrc, RwLock, Lock, MetadataRef, AtomicCell};
1313
use syntax::ast;
1414
use syntax::ext::base::SyntaxExtension;
@@ -96,8 +96,6 @@ pub struct CrateMetadata {
9696

9797
pub struct CStore {
9898
metas: RwLock<IndexVec<CrateNum, Option<Lrc<CrateMetadata>>>>,
99-
/// Map from NodeId's of local extern crate statements to crate numbers
100-
extern_mod_crate_map: Lock<NodeMap<CrateNum>>,
10199
crate metadata_loader: Box<dyn MetadataLoader + Sync>,
102100
}
103101

@@ -114,7 +112,6 @@ impl CStore {
114112
// corresponding `CrateNum`. This first entry will always remain
115113
// `None`.
116114
metas: RwLock::new(IndexVec::from_elem_n(None, 1)),
117-
extern_mod_crate_map: Default::default(),
118115
metadata_loader,
119116
}
120117
}
@@ -178,12 +175,4 @@ impl CStore {
178175
}
179176
return ordering
180177
}
181-
182-
crate fn add_extern_mod_stmt_cnum(&self, emod_id: ast::NodeId, cnum: CrateNum) {
183-
self.extern_mod_crate_map.borrow_mut().insert(emod_id, cnum);
184-
}
185-
186-
crate fn do_extern_mod_stmt_cnum(&self, emod_id: ast::NodeId) -> Option<CrateNum> {
187-
self.extern_mod_crate_map.borrow().get(&emod_id).cloned()
188-
}
189178
}

src/librustc_metadata/cstore_impl.rs

-5
Original file line numberDiff line numberDiff line change
@@ -538,11 +538,6 @@ impl CrateStore for cstore::CStore {
538538
result
539539
}
540540

541-
fn extern_mod_stmt_cnum_untracked(&self, emod_id: ast::NodeId) -> Option<CrateNum>
542-
{
543-
self.do_extern_mod_stmt_cnum(emod_id)
544-
}
545-
546541
fn postorder_cnums_untracked(&self) -> Vec<CrateNum> {
547542
self.do_postorder_cnums_untracked()
548543
}

src/librustc_resolve/build_reduced_graph.rs

+1
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
617617
let crate_id = self.r.crate_loader.process_extern_crate(
618618
item, &self.r.definitions
619619
);
620+
self.r.extern_crate_map.insert(item.id, crate_id);
620621
self.r.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX })
621622
};
622623

src/librustc_resolve/lib.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use rustc::session::Session;
2626
use rustc::lint;
2727
use rustc::hir::def::{self, DefKind, PartialRes, CtorKind, CtorOf, NonMacroAttrKind, ExportMap};
2828
use rustc::hir::def::Namespace::*;
29-
use rustc::hir::def_id::{CRATE_DEF_INDEX, LOCAL_CRATE, DefId};
29+
use rustc::hir::def_id::{CRATE_DEF_INDEX, LOCAL_CRATE, CrateNum, DefId};
3030
use rustc::hir::{TraitMap, GlobMap};
3131
use rustc::ty::{self, DefIdTree};
3232
use rustc::util::nodemap::{NodeMap, NodeSet, FxHashMap, FxHashSet, DefIdMap};
@@ -855,6 +855,8 @@ pub struct Resolver<'a> {
855855
/// Resolutions for labels (node IDs of their corresponding blocks or loops).
856856
label_res_map: NodeMap<NodeId>,
857857

858+
/// `CrateNum` resolutions of `extern crate` items.
859+
pub extern_crate_map: NodeMap<CrateNum>,
858860
pub export_map: ExportMap<NodeId>,
859861
pub trait_map: TraitMap,
860862

@@ -1155,6 +1157,7 @@ impl<'a> Resolver<'a> {
11551157
partial_res_map: Default::default(),
11561158
import_res_map: Default::default(),
11571159
label_res_map: Default::default(),
1160+
extern_crate_map: Default::default(),
11581161
export_map: FxHashMap::default(),
11591162
trait_map: Default::default(),
11601163
empty_module,

0 commit comments

Comments
 (0)