diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-10-13 19:07:17 +0300 |
|---|---|---|
| committer | Pietro Albini <pietro@pietroalbini.org> | 2018-10-18 16:54:59 +0200 |
| commit | da60a9cabea7448ef6a3670cfc95d285871d174c (patch) | |
| tree | 8a5c8f92c06181e62bd08a6efdc0ea046fc7d713 /src | |
| parent | 3d1990a7077d711ad5ab3845b5d9b07148607978 (diff) | |
Revert "rustc_resolve: move extern_prelude from Resolver to Session."
This reverts commit e90985acdec9928da9f6d157cfeb64f0ee98bffe.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/session/mod.rs | 18 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 20 | ||||
| -rw-r--r-- | src/librustc_resolve/macros.rs | 2 | ||||
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 6 |
4 files changed, 22 insertions, 24 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 18fc3538537..619262abb0b 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -37,7 +37,7 @@ use syntax::parse; use syntax::parse::ParseSess; use syntax::{ast, source_map}; use syntax::feature_gate::AttributeType; -use syntax_pos::{MultiSpan, Span, symbol::Symbol}; +use syntax_pos::{MultiSpan, Span}; use util::profiling::SelfProfiler; use rustc_target::spec::PanicStrategy; @@ -164,10 +164,6 @@ pub struct Session { /// Cap lint level specified by a driver specifically. pub driver_lint_caps: FxHashMap<lint::LintId, lint::Level>, - - /// All the crate names specified with `--extern`, and the builtin ones. - /// Starting with the Rust 2018 edition, absolute paths resolve in this set. - pub extern_prelude: FxHashSet<Symbol>, } pub struct PerfStats { @@ -1113,17 +1109,6 @@ pub fn build_session_( }; let working_dir = file_path_mapping.map_prefix(working_dir); - let mut extern_prelude: FxHashSet<Symbol> = - sopts.externs.iter().map(|kv| Symbol::intern(kv.0)).collect(); - - // HACK(eddyb) this ignores the `no_{core,std}` attributes. - // FIXME(eddyb) warn (somewhere) if core/std is used with `no_{core,std}`. - // if !attr::contains_name(&krate.attrs, "no_core") { - // if !attr::contains_name(&krate.attrs, "no_std") { - extern_prelude.insert(Symbol::intern("core")); - extern_prelude.insert(Symbol::intern("std")); - extern_prelude.insert(Symbol::intern("meta")); - let sess = Session { target: target_cfg, host, @@ -1198,7 +1183,6 @@ pub fn build_session_( has_global_allocator: Once::new(), has_panic_handler: Once::new(), driver_lint_caps: FxHashMap(), - extern_prelude, }; validate_commandline_args_with_session_available(&sess); diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index de6602e680d..8581ab21291 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1361,6 +1361,7 @@ pub struct Resolver<'a, 'b: 'a> { graph_root: Module<'a>, prelude: Option<Module<'a>>, + extern_prelude: FxHashSet<Name>, /// n.b. This is used only for better diagnostics, not name resolution itself. has_self: FxHashSet<DefId>, @@ -1674,6 +1675,17 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { DefCollector::new(&mut definitions, Mark::root()) .collect_root(crate_name, session.local_crate_disambiguator()); + let mut extern_prelude: FxHashSet<Name> = + session.opts.externs.iter().map(|kv| Symbol::intern(kv.0)).collect(); + + // HACK(eddyb) this ignore the `no_{core,std}` attributes. + // FIXME(eddyb) warn (elsewhere) if core/std is used with `no_{core,std}`. + // if !attr::contains_name(&krate.attrs, "no_core") { + // if !attr::contains_name(&krate.attrs, "no_std") { + extern_prelude.insert(Symbol::intern("core")); + extern_prelude.insert(Symbol::intern("std")); + extern_prelude.insert(Symbol::intern("meta")); + let mut invocations = FxHashMap(); invocations.insert(Mark::root(), arenas.alloc_invocation_data(InvocationData::root(graph_root))); @@ -1692,6 +1704,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { // AST. graph_root, prelude: None, + extern_prelude, has_self: FxHashSet(), field_names: FxHashMap(), @@ -1963,7 +1976,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { if !module.no_implicit_prelude { // `record_used` means that we don't try to load crates during speculative resolution - if record_used && ns == TypeNS && self.session.extern_prelude.contains(&ident.name) { + if record_used && ns == TypeNS && self.extern_prelude.contains(&ident.name) { let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span); let crate_root = self.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX }); self.populate_module_if_necessary(&crate_root); @@ -3950,7 +3963,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { } else { // Items from the prelude if !module.no_implicit_prelude { - names.extend(self.session.extern_prelude.iter().cloned()); + names.extend(self.extern_prelude.iter().cloned()); if let Some(prelude) = self.prelude { add_module_candidates(prelude, &mut names); } @@ -4396,7 +4409,8 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { ); if self.session.rust_2018() { - for &name in &self.session.extern_prelude { + let extern_prelude_names = self.extern_prelude.clone(); + for &name in extern_prelude_names.iter() { let ident = Ident::with_empty_ctxt(name); match self.crate_loader.maybe_process_path_extern(name, ident.span) { Some(crate_id) => { diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 6aac4c7945c..349ddcd9a42 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -681,7 +681,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> { result } WhereToResolve::ExternPrelude => { - if use_prelude && self.session.extern_prelude.contains(&ident.name) { + if use_prelude && self.extern_prelude.contains(&ident.name) { let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span); let crate_root = diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 4cf1a0d8935..2628772745b 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -199,7 +199,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { if !( ns == TypeNS && !ident.is_path_segment_keyword() && - self.session.extern_prelude.contains(&ident.name) + self.extern_prelude.contains(&ident.name) ) { // ... unless the crate name is not in the `extern_prelude`. return binding; @@ -218,7 +218,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { } else if ns == TypeNS && !ident.is_path_segment_keyword() && - self.session.extern_prelude.contains(&ident.name) + self.extern_prelude.contains(&ident.name) { let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span); @@ -736,7 +736,7 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> { let uniform_paths_feature = self.session.features_untracked().uniform_paths; for ((span, _, ns), results) in uniform_paths_canaries { let name = results.name; - let external_crate = if ns == TypeNS && self.session.extern_prelude.contains(&name) { + let external_crate = if ns == TypeNS && self.extern_prelude.contains(&name) { let crate_id = self.crate_loader.process_path_extern(name, span); Some(Def::Mod(DefId { krate: crate_id, index: CRATE_DEF_INDEX })) |
