Skip to content

Commit da60a9c

Browse files
petrochenkovpietroalbini
authored andcommitted
Revert "rustc_resolve: move extern_prelude from Resolver to Session."
This reverts commit e90985a.
1 parent 3d1990a commit da60a9c

File tree

4 files changed

+22
-24
lines changed

4 files changed

+22
-24
lines changed

src/librustc/session/mod.rs

+1-17
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use syntax::parse;
3737
use syntax::parse::ParseSess;
3838
use syntax::{ast, source_map};
3939
use syntax::feature_gate::AttributeType;
40-
use syntax_pos::{MultiSpan, Span, symbol::Symbol};
40+
use syntax_pos::{MultiSpan, Span};
4141
use util::profiling::SelfProfiler;
4242

4343
use rustc_target::spec::PanicStrategy;
@@ -164,10 +164,6 @@ pub struct Session {
164164

165165
/// Cap lint level specified by a driver specifically.
166166
pub driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
167-
168-
/// All the crate names specified with `--extern`, and the builtin ones.
169-
/// Starting with the Rust 2018 edition, absolute paths resolve in this set.
170-
pub extern_prelude: FxHashSet<Symbol>,
171167
}
172168

173169
pub struct PerfStats {
@@ -1113,17 +1109,6 @@ pub fn build_session_(
11131109
};
11141110
let working_dir = file_path_mapping.map_prefix(working_dir);
11151111

1116-
let mut extern_prelude: FxHashSet<Symbol> =
1117-
sopts.externs.iter().map(|kv| Symbol::intern(kv.0)).collect();
1118-
1119-
// HACK(eddyb) this ignores the `no_{core,std}` attributes.
1120-
// FIXME(eddyb) warn (somewhere) if core/std is used with `no_{core,std}`.
1121-
// if !attr::contains_name(&krate.attrs, "no_core") {
1122-
// if !attr::contains_name(&krate.attrs, "no_std") {
1123-
extern_prelude.insert(Symbol::intern("core"));
1124-
extern_prelude.insert(Symbol::intern("std"));
1125-
extern_prelude.insert(Symbol::intern("meta"));
1126-
11271112
let sess = Session {
11281113
target: target_cfg,
11291114
host,
@@ -1198,7 +1183,6 @@ pub fn build_session_(
11981183
has_global_allocator: Once::new(),
11991184
has_panic_handler: Once::new(),
12001185
driver_lint_caps: FxHashMap(),
1201-
extern_prelude,
12021186
};
12031187

12041188
validate_commandline_args_with_session_available(&sess);

src/librustc_resolve/lib.rs

+17-3
Original file line numberDiff line numberDiff line change
@@ -1361,6 +1361,7 @@ pub struct Resolver<'a, 'b: 'a> {
13611361
graph_root: Module<'a>,
13621362

13631363
prelude: Option<Module<'a>>,
1364+
extern_prelude: FxHashSet<Name>,
13641365

13651366
/// n.b. This is used only for better diagnostics, not name resolution itself.
13661367
has_self: FxHashSet<DefId>,
@@ -1674,6 +1675,17 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
16741675
DefCollector::new(&mut definitions, Mark::root())
16751676
.collect_root(crate_name, session.local_crate_disambiguator());
16761677

1678+
let mut extern_prelude: FxHashSet<Name> =
1679+
session.opts.externs.iter().map(|kv| Symbol::intern(kv.0)).collect();
1680+
1681+
// HACK(eddyb) this ignore the `no_{core,std}` attributes.
1682+
// FIXME(eddyb) warn (elsewhere) if core/std is used with `no_{core,std}`.
1683+
// if !attr::contains_name(&krate.attrs, "no_core") {
1684+
// if !attr::contains_name(&krate.attrs, "no_std") {
1685+
extern_prelude.insert(Symbol::intern("core"));
1686+
extern_prelude.insert(Symbol::intern("std"));
1687+
extern_prelude.insert(Symbol::intern("meta"));
1688+
16771689
let mut invocations = FxHashMap();
16781690
invocations.insert(Mark::root(),
16791691
arenas.alloc_invocation_data(InvocationData::root(graph_root)));
@@ -1692,6 +1704,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
16921704
// AST.
16931705
graph_root,
16941706
prelude: None,
1707+
extern_prelude,
16951708

16961709
has_self: FxHashSet(),
16971710
field_names: FxHashMap(),
@@ -1963,7 +1976,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
19631976

19641977
if !module.no_implicit_prelude {
19651978
// `record_used` means that we don't try to load crates during speculative resolution
1966-
if record_used && ns == TypeNS && self.session.extern_prelude.contains(&ident.name) {
1979+
if record_used && ns == TypeNS && self.extern_prelude.contains(&ident.name) {
19671980
let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span);
19681981
let crate_root = self.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX });
19691982
self.populate_module_if_necessary(&crate_root);
@@ -3950,7 +3963,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
39503963
} else {
39513964
// Items from the prelude
39523965
if !module.no_implicit_prelude {
3953-
names.extend(self.session.extern_prelude.iter().cloned());
3966+
names.extend(self.extern_prelude.iter().cloned());
39543967
if let Some(prelude) = self.prelude {
39553968
add_module_candidates(prelude, &mut names);
39563969
}
@@ -4396,7 +4409,8 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
43964409
);
43974410

43984411
if self.session.rust_2018() {
4399-
for &name in &self.session.extern_prelude {
4412+
let extern_prelude_names = self.extern_prelude.clone();
4413+
for &name in extern_prelude_names.iter() {
44004414
let ident = Ident::with_empty_ctxt(name);
44014415
match self.crate_loader.maybe_process_path_extern(name, ident.span) {
44024416
Some(crate_id) => {

src/librustc_resolve/macros.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
681681
result
682682
}
683683
WhereToResolve::ExternPrelude => {
684-
if use_prelude && self.session.extern_prelude.contains(&ident.name) {
684+
if use_prelude && self.extern_prelude.contains(&ident.name) {
685685
let crate_id =
686686
self.crate_loader.process_path_extern(ident.name, ident.span);
687687
let crate_root =

src/librustc_resolve/resolve_imports.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> {
199199
if !(
200200
ns == TypeNS &&
201201
!ident.is_path_segment_keyword() &&
202-
self.session.extern_prelude.contains(&ident.name)
202+
self.extern_prelude.contains(&ident.name)
203203
) {
204204
// ... unless the crate name is not in the `extern_prelude`.
205205
return binding;
@@ -218,7 +218,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> {
218218
} else if
219219
ns == TypeNS &&
220220
!ident.is_path_segment_keyword() &&
221-
self.session.extern_prelude.contains(&ident.name)
221+
self.extern_prelude.contains(&ident.name)
222222
{
223223
let crate_id =
224224
self.crate_loader.process_path_extern(ident.name, ident.span);
@@ -736,7 +736,7 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> {
736736
let uniform_paths_feature = self.session.features_untracked().uniform_paths;
737737
for ((span, _, ns), results) in uniform_paths_canaries {
738738
let name = results.name;
739-
let external_crate = if ns == TypeNS && self.session.extern_prelude.contains(&name) {
739+
let external_crate = if ns == TypeNS && self.extern_prelude.contains(&name) {
740740
let crate_id =
741741
self.crate_loader.process_path_extern(name, span);
742742
Some(Def::Mod(DefId { krate: crate_id, index: CRATE_DEF_INDEX }))

0 commit comments

Comments
 (0)