Use LocalExpnId where possible.
This commit is contained in:
parent
6e78d6c9d6
commit
078dd37f88
19 changed files with 169 additions and 147 deletions
|
@ -31,7 +31,7 @@ use rustc_middle::bug;
|
|||
use rustc_middle::hir::exports::Export;
|
||||
use rustc_middle::middle::cstore::CrateStore;
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::hygiene::{ExpnId, MacroKind};
|
||||
use rustc_span::hygiene::{ExpnId, LocalExpnId, MacroKind};
|
||||
use rustc_span::source_map::{respan, Spanned};
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::Span;
|
||||
|
@ -42,7 +42,7 @@ use tracing::debug;
|
|||
|
||||
type Res = def::Res<NodeId>;
|
||||
|
||||
impl<'a> ToNameBinding<'a> for (Module<'a>, ty::Visibility, Span, ExpnId) {
|
||||
impl<'a> ToNameBinding<'a> for (Module<'a>, ty::Visibility, Span, LocalExpnId) {
|
||||
fn to_name_binding(self, arenas: &'a ResolverArenas<'a>) -> &'a NameBinding<'a> {
|
||||
arenas.alloc_name_binding(NameBinding {
|
||||
kind: NameBindingKind::Module(self.0),
|
||||
|
@ -54,7 +54,7 @@ impl<'a> ToNameBinding<'a> for (Module<'a>, ty::Visibility, Span, ExpnId) {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> ToNameBinding<'a> for (Res, ty::Visibility, Span, ExpnId) {
|
||||
impl<'a> ToNameBinding<'a> for (Res, ty::Visibility, Span, LocalExpnId) {
|
||||
fn to_name_binding(self, arenas: &'a ResolverArenas<'a>) -> &'a NameBinding<'a> {
|
||||
arenas.alloc_name_binding(NameBinding {
|
||||
kind: NameBindingKind::Res(self.0, false),
|
||||
|
@ -68,7 +68,7 @@ impl<'a> ToNameBinding<'a> for (Res, ty::Visibility, Span, ExpnId) {
|
|||
|
||||
struct IsMacroExport;
|
||||
|
||||
impl<'a> ToNameBinding<'a> for (Res, ty::Visibility, Span, ExpnId, IsMacroExport) {
|
||||
impl<'a> ToNameBinding<'a> for (Res, ty::Visibility, Span, LocalExpnId, IsMacroExport) {
|
||||
fn to_name_binding(self, arenas: &'a ResolverArenas<'a>) -> &'a NameBinding<'a> {
|
||||
arenas.alloc_name_binding(NameBinding {
|
||||
kind: NameBindingKind::Res(self.0, true),
|
||||
|
@ -157,7 +157,12 @@ impl<'a> Resolver<'a> {
|
|||
crate fn macro_def_scope(&mut self, expn_id: ExpnId) -> Module<'a> {
|
||||
let def_id = match expn_id.expn_data().macro_def_id {
|
||||
Some(def_id) => def_id,
|
||||
None => return self.ast_transform_scopes.get(&expn_id).unwrap_or(&self.graph_root),
|
||||
None => {
|
||||
return expn_id
|
||||
.as_local()
|
||||
.and_then(|expn_id| self.ast_transform_scopes.get(&expn_id))
|
||||
.unwrap_or(&self.graph_root);
|
||||
}
|
||||
};
|
||||
self.macro_def_scope_from_def_id(def_id)
|
||||
}
|
||||
|
@ -739,7 +744,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
if ptr::eq(parent, self.r.graph_root) {
|
||||
if let Some(entry) = self.r.extern_prelude.get(&ident.normalize_to_macros_2_0())
|
||||
{
|
||||
if expansion != ExpnId::root()
|
||||
if expansion != LocalExpnId::ROOT
|
||||
&& orig_name.is_some()
|
||||
&& entry.extern_crate_item.is_none()
|
||||
{
|
||||
|
@ -769,7 +774,13 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
no_implicit_prelude: parent.no_implicit_prelude || {
|
||||
self.r.session.contains_name(&item.attrs, sym::no_implicit_prelude)
|
||||
},
|
||||
..ModuleData::new(Some(parent), module_kind, def_id, expansion, item.span)
|
||||
..ModuleData::new(
|
||||
Some(parent),
|
||||
module_kind,
|
||||
def_id,
|
||||
expansion.to_expn_id(),
|
||||
item.span,
|
||||
)
|
||||
});
|
||||
self.r.define(parent, ident, TypeNS, (module, vis, sp, expansion));
|
||||
self.r.module_map.insert(local_def_id, module);
|
||||
|
@ -808,7 +819,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
parent,
|
||||
module_kind,
|
||||
parent.nearest_parent_mod,
|
||||
expansion,
|
||||
expansion.to_expn_id(),
|
||||
item.span,
|
||||
);
|
||||
self.r.define(parent, ident, TypeNS, (module, vis, sp, expansion));
|
||||
|
@ -883,7 +894,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
parent,
|
||||
module_kind,
|
||||
parent.nearest_parent_mod,
|
||||
expansion,
|
||||
expansion.to_expn_id(),
|
||||
item.span,
|
||||
);
|
||||
self.r.define(parent, ident, TypeNS, (module, vis, sp, expansion));
|
||||
|
@ -926,7 +937,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
parent,
|
||||
ModuleKind::Block(block.id),
|
||||
parent.nearest_parent_mod,
|
||||
expansion,
|
||||
expansion.to_expn_id(),
|
||||
block.span,
|
||||
);
|
||||
self.r.block_map.insert(block.id, module);
|
||||
|
@ -946,7 +957,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
parent,
|
||||
ModuleKind::Def(kind, def_id, ident.name),
|
||||
def_id,
|
||||
expansion,
|
||||
expansion.to_expn_id(),
|
||||
span,
|
||||
);
|
||||
self.r.define(parent, ident, TypeNS, (module, vis, span, expansion));
|
||||
|
@ -1112,7 +1123,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
})
|
||||
};
|
||||
|
||||
let allow_shadowing = self.parent_scope.expansion == ExpnId::root();
|
||||
let allow_shadowing = self.parent_scope.expansion == LocalExpnId::ROOT;
|
||||
if let Some(span) = import_all {
|
||||
let import = macro_use_import(self, span);
|
||||
self.r.potentially_unused_imports.push(import);
|
||||
|
@ -1175,7 +1186,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
false
|
||||
}
|
||||
|
||||
fn visit_invoc(&mut self, id: NodeId) -> ExpnId {
|
||||
fn visit_invoc(&mut self, id: NodeId) -> LocalExpnId {
|
||||
let invoc_id = id.placeholder_to_expn_id();
|
||||
let old_parent_scope = self.r.invocation_parent_scopes.insert(invoc_id, self.parent_scope);
|
||||
assert!(old_parent_scope.is_none(), "invocation data is reset for an invocation");
|
||||
|
|
|
@ -6,7 +6,7 @@ use rustc_ast_lowering::ResolverAstLowering;
|
|||
use rustc_expand::expand::AstFragment;
|
||||
use rustc_hir::def_id::LocalDefId;
|
||||
use rustc_hir::definitions::*;
|
||||
use rustc_span::hygiene::ExpnId;
|
||||
use rustc_span::hygiene::LocalExpnId;
|
||||
use rustc_span::symbol::{kw, sym};
|
||||
use rustc_span::Span;
|
||||
use tracing::debug;
|
||||
|
@ -14,7 +14,7 @@ use tracing::debug;
|
|||
crate fn collect_definitions(
|
||||
resolver: &mut Resolver<'_>,
|
||||
fragment: &AstFragment,
|
||||
expansion: ExpnId,
|
||||
expansion: LocalExpnId,
|
||||
) {
|
||||
let (parent_def, impl_trait_context) = resolver.invocation_parents[&expansion];
|
||||
fragment.visit_with(&mut DefCollector { resolver, parent_def, expansion, impl_trait_context });
|
||||
|
@ -25,14 +25,14 @@ struct DefCollector<'a, 'b> {
|
|||
resolver: &'a mut Resolver<'b>,
|
||||
parent_def: LocalDefId,
|
||||
impl_trait_context: ImplTraitContext,
|
||||
expansion: ExpnId,
|
||||
expansion: LocalExpnId,
|
||||
}
|
||||
|
||||
impl<'a, 'b> DefCollector<'a, 'b> {
|
||||
fn create_def(&mut self, node_id: NodeId, data: DefPathData, span: Span) -> LocalDefId {
|
||||
let parent_def = self.parent_def;
|
||||
debug!("create_def(node_id={:?}, data={:?}, parent_def={:?})", node_id, data, parent_def);
|
||||
self.resolver.create_def(parent_def, node_id, data, self.expansion, span)
|
||||
self.resolver.create_def(parent_def, node_id, data, self.expansion.to_expn_id(), span)
|
||||
}
|
||||
|
||||
fn with_parent<F: FnOnce(&mut Self)>(&mut self, parent_def: LocalDefId, f: F) {
|
||||
|
@ -285,7 +285,7 @@ impl<'a, 'b> visit::Visitor<'a> for DefCollector<'a, 'b> {
|
|||
item_def,
|
||||
node_id,
|
||||
DefPathData::ImplTrait,
|
||||
self.expansion,
|
||||
self.expansion.to_expn_id(),
|
||||
ty.span,
|
||||
),
|
||||
ImplTraitContext::Existential => {
|
||||
|
|
|
@ -22,7 +22,7 @@ use rustc_middle::span_bug;
|
|||
use rustc_middle::ty;
|
||||
use rustc_session::lint::builtin::{PUB_USE_OF_PRIVATE_EXTERN_CRATE, UNUSED_IMPORTS};
|
||||
use rustc_session::lint::BuiltinLintDiagnostics;
|
||||
use rustc_span::hygiene::ExpnId;
|
||||
use rustc_span::hygiene::LocalExpnId;
|
||||
use rustc_span::lev_distance::find_best_match_for_name;
|
||||
use rustc_span::symbol::{kw, Ident, Symbol};
|
||||
use rustc_span::{MultiSpan, Span};
|
||||
|
@ -237,8 +237,9 @@ impl<'a> Resolver<'a> {
|
|||
if ns == TypeNS {
|
||||
if ident.name == kw::Crate || ident.name == kw::DollarCrate {
|
||||
let module = self.resolve_crate_root(ident);
|
||||
let binding = (module, ty::Visibility::Public, module.span, ExpnId::root())
|
||||
.to_name_binding(self.arenas);
|
||||
let binding =
|
||||
(module, ty::Visibility::Public, module.span, LocalExpnId::ROOT)
|
||||
.to_name_binding(self.arenas);
|
||||
return Ok(binding);
|
||||
} else if ident.name == kw::Super || ident.name == kw::SelfLower {
|
||||
// FIXME: Implement these with renaming requirements so that e.g.
|
||||
|
@ -265,7 +266,7 @@ impl<'a> Resolver<'a> {
|
|||
self.resolution(module, key).try_borrow_mut().map_err(|_| (Determined, Weak::No))?; // This happens when there is a cycle of imports.
|
||||
|
||||
if let Some(binding) = resolution.binding {
|
||||
if !restricted_shadowing && binding.expansion != ExpnId::root() {
|
||||
if !restricted_shadowing && binding.expansion != LocalExpnId::ROOT {
|
||||
if let NameBindingKind::Res(_, true) = binding.kind {
|
||||
self.macro_expanded_macro_export_errors.insert((path_span, binding.span));
|
||||
}
|
||||
|
@ -307,7 +308,7 @@ impl<'a> Resolver<'a> {
|
|||
if let Some(shadowed_glob) = resolution.shadowed_glob {
|
||||
// Forbid expanded shadowing to avoid time travel.
|
||||
if restricted_shadowing
|
||||
&& binding.expansion != ExpnId::root()
|
||||
&& binding.expansion != LocalExpnId::ROOT
|
||||
&& binding.res() != shadowed_glob.res()
|
||||
{
|
||||
self.ambiguity_errors.push(AmbiguityError {
|
||||
|
@ -521,7 +522,7 @@ impl<'a> Resolver<'a> {
|
|||
if old_glob { (old_binding, binding) } else { (binding, old_binding) };
|
||||
if glob_binding.res() != nonglob_binding.res()
|
||||
&& key.ns == MacroNS
|
||||
&& nonglob_binding.expansion != ExpnId::root()
|
||||
&& nonglob_binding.expansion != LocalExpnId::ROOT
|
||||
{
|
||||
resolution.binding = Some(this.ambiguity(
|
||||
AmbiguityKind::GlobVsExpanded,
|
||||
|
@ -1271,7 +1272,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
|
|||
target: Ident,
|
||||
) {
|
||||
// Skip if the import was produced by a macro.
|
||||
if import.parent_scope.expansion != ExpnId::root() {
|
||||
if import.parent_scope.expansion != LocalExpnId::ROOT {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ use rustc_session::lint;
|
|||
use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer};
|
||||
use rustc_session::Session;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::hygiene::{ExpnId, ExpnKind, MacroKind, SyntaxContext, Transparency};
|
||||
use rustc_span::hygiene::{ExpnId, ExpnKind, LocalExpnId, MacroKind, SyntaxContext, Transparency};
|
||||
use rustc_span::source_map::{CachingSourceMapView, Spanned};
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
|
@ -103,7 +103,7 @@ impl Determinacy {
|
|||
/// but not for late resolution yet.
|
||||
#[derive(Clone, Copy)]
|
||||
enum Scope<'a> {
|
||||
DeriveHelpers(ExpnId),
|
||||
DeriveHelpers(LocalExpnId),
|
||||
DeriveHelpersCompat,
|
||||
MacroRules(MacroRulesScopeRef<'a>),
|
||||
CrateRoot,
|
||||
|
@ -143,7 +143,7 @@ enum ScopeSet<'a> {
|
|||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct ParentScope<'a> {
|
||||
module: Module<'a>,
|
||||
expansion: ExpnId,
|
||||
expansion: LocalExpnId,
|
||||
macro_rules: MacroRulesScopeRef<'a>,
|
||||
derives: &'a [ast::Path],
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ impl<'a> ParentScope<'a> {
|
|||
pub fn module(module: Module<'a>, resolver: &Resolver<'a>) -> ParentScope<'a> {
|
||||
ParentScope {
|
||||
module,
|
||||
expansion: ExpnId::root(),
|
||||
expansion: LocalExpnId::ROOT,
|
||||
macro_rules: resolver.arenas.alloc_macro_rules_scope(MacroRulesScope::Empty),
|
||||
derives: &[],
|
||||
}
|
||||
|
@ -515,7 +515,7 @@ pub struct ModuleData<'a> {
|
|||
populate_on_access: Cell<bool>,
|
||||
|
||||
/// Macro invocations that can expand into items in this module.
|
||||
unexpanded_invocations: RefCell<FxHashSet<ExpnId>>,
|
||||
unexpanded_invocations: RefCell<FxHashSet<LocalExpnId>>,
|
||||
|
||||
/// Whether `#[no_implicit_prelude]` is active.
|
||||
no_implicit_prelude: bool,
|
||||
|
@ -645,7 +645,7 @@ impl<'a> fmt::Debug for ModuleData<'a> {
|
|||
pub struct NameBinding<'a> {
|
||||
kind: NameBindingKind<'a>,
|
||||
ambiguity: Option<(&'a NameBinding<'a>, AmbiguityKind)>,
|
||||
expansion: ExpnId,
|
||||
expansion: LocalExpnId,
|
||||
span: Span,
|
||||
vis: ty::Visibility,
|
||||
}
|
||||
|
@ -829,7 +829,11 @@ impl<'a> NameBinding<'a> {
|
|||
// in some later round and screw up our previously found resolution.
|
||||
// See more detailed explanation in
|
||||
// https://github.com/rust-lang/rust/pull/53778#issuecomment-419224049
|
||||
fn may_appear_after(&self, invoc_parent_expansion: ExpnId, binding: &NameBinding<'_>) -> bool {
|
||||
fn may_appear_after(
|
||||
&self,
|
||||
invoc_parent_expansion: LocalExpnId,
|
||||
binding: &NameBinding<'_>,
|
||||
) -> bool {
|
||||
// self > max(invoc, binding) => !(self <= invoc || self <= binding)
|
||||
// Expansions are partially ordered, so "may appear after" is an inversion of
|
||||
// "certainly appears before or simultaneously" and includes unordered cases.
|
||||
|
@ -966,7 +970,7 @@ pub struct Resolver<'a> {
|
|||
dummy_ext_derive: Lrc<SyntaxExtension>,
|
||||
non_macro_attrs: [Lrc<SyntaxExtension>; 2],
|
||||
local_macro_def_scopes: FxHashMap<LocalDefId, Module<'a>>,
|
||||
ast_transform_scopes: FxHashMap<ExpnId, Module<'a>>,
|
||||
ast_transform_scopes: FxHashMap<LocalExpnId, Module<'a>>,
|
||||
unused_macros: FxHashMap<LocalDefId, (NodeId, Span)>,
|
||||
proc_macro_stubs: FxHashSet<LocalDefId>,
|
||||
/// Traces collected during macro resolution and validated when it's complete.
|
||||
|
@ -978,18 +982,18 @@ pub struct Resolver<'a> {
|
|||
/// `derive(Copy)` marks items they are applied to so they are treated specially later.
|
||||
/// Derive macros cannot modify the item themselves and have to store the markers in the global
|
||||
/// context, so they attach the markers to derive container IDs using this resolver table.
|
||||
containers_deriving_copy: FxHashSet<ExpnId>,
|
||||
containers_deriving_copy: FxHashSet<LocalExpnId>,
|
||||
/// Parent scopes in which the macros were invoked.
|
||||
/// FIXME: `derives` are missing in these parent scopes and need to be taken from elsewhere.
|
||||
invocation_parent_scopes: FxHashMap<ExpnId, ParentScope<'a>>,
|
||||
invocation_parent_scopes: FxHashMap<LocalExpnId, ParentScope<'a>>,
|
||||
/// `macro_rules` scopes *produced* by expanding the macro invocations,
|
||||
/// include all the `macro_rules` items and other invocations generated by them.
|
||||
output_macro_rules_scopes: FxHashMap<ExpnId, MacroRulesScopeRef<'a>>,
|
||||
output_macro_rules_scopes: FxHashMap<LocalExpnId, MacroRulesScopeRef<'a>>,
|
||||
/// Helper attributes that are in scope for the given expansion.
|
||||
helper_attrs: FxHashMap<ExpnId, Vec<Ident>>,
|
||||
helper_attrs: FxHashMap<LocalExpnId, Vec<Ident>>,
|
||||
/// Ready or in-progress results of resolving paths inside the `#[derive(...)]` attribute
|
||||
/// with the given `ExpnId`.
|
||||
derive_data: FxHashMap<ExpnId, DeriveData>,
|
||||
derive_data: FxHashMap<LocalExpnId, DeriveData>,
|
||||
|
||||
/// Avoid duplicated errors for "name already defined".
|
||||
name_already_seen: FxHashMap<Symbol, Span>,
|
||||
|
@ -1018,7 +1022,7 @@ pub struct Resolver<'a> {
|
|||
/// When collecting definitions from an AST fragment produced by a macro invocation `ExpnId`
|
||||
/// we know what parent node that fragment should be attached to thanks to this table,
|
||||
/// and how the `impl Trait` fragments were introduced.
|
||||
invocation_parents: FxHashMap<ExpnId, (LocalDefId, ImplTraitContext)>,
|
||||
invocation_parents: FxHashMap<LocalExpnId, (LocalDefId, ImplTraitContext)>,
|
||||
|
||||
next_disambiguator: FxHashMap<(LocalDefId, DefPathData), u32>,
|
||||
/// Some way to know that we are in a *trait* impl in `visit_assoc_item`.
|
||||
|
@ -1268,7 +1272,7 @@ impl<'a> Resolver<'a> {
|
|||
node_id_to_def_id.insert(CRATE_NODE_ID, root);
|
||||
|
||||
let mut invocation_parents = FxHashMap::default();
|
||||
invocation_parents.insert(ExpnId::root(), (root, ImplTraitContext::Existential));
|
||||
invocation_parents.insert(LocalExpnId::ROOT, (root, ImplTraitContext::Existential));
|
||||
|
||||
let mut extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'_>> = session
|
||||
.opts
|
||||
|
@ -1342,7 +1346,7 @@ impl<'a> Resolver<'a> {
|
|||
dummy_binding: arenas.alloc_name_binding(NameBinding {
|
||||
kind: NameBindingKind::Res(Res::Err, false),
|
||||
ambiguity: None,
|
||||
expansion: ExpnId::root(),
|
||||
expansion: LocalExpnId::ROOT,
|
||||
span: DUMMY_SP,
|
||||
vis: ty::Visibility::Public,
|
||||
}),
|
||||
|
@ -1392,7 +1396,7 @@ impl<'a> Resolver<'a> {
|
|||
};
|
||||
|
||||
let root_parent_scope = ParentScope::module(graph_root, &resolver);
|
||||
resolver.invocation_parent_scopes.insert(ExpnId::root(), root_parent_scope);
|
||||
resolver.invocation_parent_scopes.insert(LocalExpnId::ROOT, root_parent_scope);
|
||||
|
||||
resolver
|
||||
}
|
||||
|
@ -1810,7 +1814,8 @@ impl<'a> Resolver<'a> {
|
|||
}
|
||||
|
||||
scope = match scope {
|
||||
Scope::DeriveHelpers(expn_id) if expn_id != ExpnId::root() => {
|
||||
Scope::DeriveHelpers(LocalExpnId::ROOT) => Scope::DeriveHelpersCompat,
|
||||
Scope::DeriveHelpers(expn_id) => {
|
||||
// Derive helpers are not visible to code generated by bang or derive macros.
|
||||
let expn_data = expn_id.expn_data();
|
||||
match expn_data.kind {
|
||||
|
@ -1818,10 +1823,9 @@ impl<'a> Resolver<'a> {
|
|||
| ExpnKind::Macro(MacroKind::Bang | MacroKind::Derive, _) => {
|
||||
Scope::DeriveHelpersCompat
|
||||
}
|
||||
_ => Scope::DeriveHelpers(expn_data.parent),
|
||||
_ => Scope::DeriveHelpers(expn_data.parent.expect_local()),
|
||||
}
|
||||
}
|
||||
Scope::DeriveHelpers(..) => Scope::DeriveHelpersCompat,
|
||||
Scope::DeriveHelpersCompat => Scope::MacroRules(parent_scope.macro_rules),
|
||||
Scope::MacroRules(macro_rules_scope) => match macro_rules_scope.get() {
|
||||
MacroRulesScope::Binding(binding) => {
|
||||
|
@ -3248,7 +3252,7 @@ impl<'a> Resolver<'a> {
|
|||
};
|
||||
let crate_root = self.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX });
|
||||
Some(
|
||||
(crate_root, ty::Visibility::Public, DUMMY_SP, ExpnId::root())
|
||||
(crate_root, ty::Visibility::Public, DUMMY_SP, LocalExpnId::ROOT)
|
||||
.to_name_binding(self.arenas),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ use rustc_session::lint::BuiltinLintDiagnostics;
|
|||
use rustc_session::parse::feature_err;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::hygiene::{self, ExpnData, ExpnId, ExpnKind};
|
||||
use rustc_span::hygiene::{self, ExpnData, ExpnKind, LocalExpnId};
|
||||
use rustc_span::hygiene::{AstPass, MacroKind};
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
|
@ -62,7 +62,7 @@ pub enum MacroRulesScope<'a> {
|
|||
Binding(&'a MacroRulesBinding<'a>),
|
||||
/// The scope introduced by a macro invocation that can potentially
|
||||
/// create a `macro_rules!` macro definition.
|
||||
Invocation(ExpnId),
|
||||
Invocation(LocalExpnId),
|
||||
}
|
||||
|
||||
/// `macro_rules!` scopes are always kept by reference and inside a cell.
|
||||
|
@ -190,7 +190,11 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
});
|
||||
}
|
||||
|
||||
fn visit_ast_fragment_with_placeholders(&mut self, expansion: ExpnId, fragment: &AstFragment) {
|
||||
fn visit_ast_fragment_with_placeholders(
|
||||
&mut self,
|
||||
expansion: LocalExpnId,
|
||||
fragment: &AstFragment,
|
||||
) {
|
||||
// Integrate the new AST fragment into all the definition and module structures.
|
||||
// We are inside the `expansion` now, but other parent scope components are still the same.
|
||||
let parent_scope = ParentScope { expansion, ..self.invocation_parent_scopes[&expansion] };
|
||||
|
@ -216,9 +220,9 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
pass: AstPass,
|
||||
features: &[Symbol],
|
||||
parent_module_id: Option<NodeId>,
|
||||
) -> ExpnId {
|
||||
) -> LocalExpnId {
|
||||
let parent_module = parent_module_id.map(|module_id| self.local_def_id(module_id));
|
||||
let expn_id = ExpnId::fresh(
|
||||
let expn_id = LocalExpnId::fresh(
|
||||
ExpnData::allow_unstable(
|
||||
ExpnKind::AstPass(pass),
|
||||
call_site,
|
||||
|
@ -244,7 +248,7 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
fn resolve_macro_invocation(
|
||||
&mut self,
|
||||
invoc: &Invocation,
|
||||
eager_expansion_root: ExpnId,
|
||||
eager_expansion_root: LocalExpnId,
|
||||
force: bool,
|
||||
) -> Result<Lrc<SyntaxExtension>, Indeterminate> {
|
||||
let invoc_id = invoc.expansion_data.id;
|
||||
|
@ -328,7 +332,7 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
| ExpnKind::Macro(MacroKind::Bang | MacroKind::Derive, _) => {
|
||||
break;
|
||||
}
|
||||
_ => expn_id = expn_data.parent,
|
||||
_ => expn_id = expn_data.parent.expect_local(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +348,7 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
fn lint_node_id(&self, expn_id: ExpnId) -> NodeId {
|
||||
fn lint_node_id(&self, expn_id: LocalExpnId) -> NodeId {
|
||||
// FIXME - make this more precise. This currently returns the NodeId of the
|
||||
// nearest closing item - we should try to return the closest parent of the ExpnId
|
||||
self.invocation_parents
|
||||
|
@ -352,13 +356,13 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
.map_or(ast::CRATE_NODE_ID, |id| self.def_id_to_node_id[id.0])
|
||||
}
|
||||
|
||||
fn has_derive_copy(&self, expn_id: ExpnId) -> bool {
|
||||
fn has_derive_copy(&self, expn_id: LocalExpnId) -> bool {
|
||||
self.containers_deriving_copy.contains(&expn_id)
|
||||
}
|
||||
|
||||
fn resolve_derives(
|
||||
&mut self,
|
||||
expn_id: ExpnId,
|
||||
expn_id: LocalExpnId,
|
||||
force: bool,
|
||||
derive_paths: &dyn Fn() -> DeriveResolutions,
|
||||
) -> Result<(), Indeterminate> {
|
||||
|
@ -423,7 +427,7 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn take_derive_resolutions(&mut self, expn_id: ExpnId) -> Option<DeriveResolutions> {
|
||||
fn take_derive_resolutions(&mut self, expn_id: LocalExpnId) -> Option<DeriveResolutions> {
|
||||
self.derive_data.remove(&expn_id).map(|data| data.resolutions)
|
||||
}
|
||||
|
||||
|
@ -431,7 +435,11 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
// Returns true if the path can certainly be resolved in one of three namespaces,
|
||||
// returns false if the path certainly cannot be resolved in any of the three namespaces.
|
||||
// Returns `Indeterminate` if we cannot give a certain answer yet.
|
||||
fn cfg_accessible(&mut self, expn_id: ExpnId, path: &ast::Path) -> Result<bool, Indeterminate> {
|
||||
fn cfg_accessible(
|
||||
&mut self,
|
||||
expn_id: LocalExpnId,
|
||||
path: &ast::Path,
|
||||
) -> Result<bool, Indeterminate> {
|
||||
let span = path.span;
|
||||
let path = &Segment::from_path(path);
|
||||
let parent_scope = self.invocation_parent_scopes[&expn_id];
|
||||
|
@ -714,7 +722,8 @@ impl<'a> Resolver<'a> {
|
|||
let ident = Ident::new(orig_ident.name, orig_ident.span.with_ctxt(ctxt));
|
||||
let ok = |res, span, arenas| {
|
||||
Ok((
|
||||
(res, ty::Visibility::Public, span, ExpnId::root()).to_name_binding(arenas),
|
||||
(res, ty::Visibility::Public, span, LocalExpnId::ROOT)
|
||||
.to_name_binding(arenas),
|
||||
Flags::empty(),
|
||||
))
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue