Skip to content

Commit 83aac43

Browse files
committed
Refactor Resolver::builtin_macros to use NameBindings instead of DefIds.
1 parent 641274f commit 83aac43

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

src/librustc_resolve/build_reduced_graph.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,12 @@ impl<'b> Resolver<'b> {
518518
module.populated.set(true)
519519
}
520520

521-
fn legacy_import_macro(&mut self, name: Name, def: Def, span: Span, allow_shadowing: bool) {
522-
self.used_crates.insert(def.def_id().krate);
521+
fn legacy_import_macro(
522+
&mut self, name: Name, binding: &'b NameBinding<'b>, span: Span, allow_shadowing: bool,
523+
) {
524+
self.used_crates.insert(binding.def().def_id().krate);
523525
self.macro_names.insert(name);
524-
if self.builtin_macros.insert(name, def.def_id()).is_some() && !allow_shadowing {
526+
if self.builtin_macros.insert(name, binding).is_some() && !allow_shadowing {
525527
let msg = format!("`{}` is already in scope", name);
526528
let note =
527529
"macro-expanded `#[macro_use]`s may not shadow existing macros (see RFC 1560)";
@@ -548,13 +550,13 @@ impl<'b> Resolver<'b> {
548550

549551
if let Some(span) = legacy_imports.import_all {
550552
module.for_each_child(|name, ns, binding| if ns == MacroNS {
551-
self.legacy_import_macro(name, binding.def(), span, allow_shadowing);
553+
self.legacy_import_macro(name, binding, span, allow_shadowing);
552554
});
553555
} else {
554556
for (name, span) in legacy_imports.imports {
555557
let result = self.resolve_name_in_module(module, name, MacroNS, false, None);
556558
if let Success(binding) = result {
557-
self.legacy_import_macro(name, binding.def(), span, allow_shadowing);
559+
self.legacy_import_macro(name, binding, span, allow_shadowing);
558560
} else {
559561
span_err!(self.session, span, E0469, "imported macro not found");
560562
}

src/librustc_resolve/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1115,7 +1115,7 @@ pub struct Resolver<'a> {
11151115
pub exported_macros: Vec<ast::MacroDef>,
11161116
crate_loader: &'a mut CrateLoader,
11171117
macro_names: FxHashSet<Name>,
1118-
builtin_macros: FxHashMap<Name, DefId>,
1118+
builtin_macros: FxHashMap<Name, &'a NameBinding<'a>>,
11191119
lexical_macro_resolutions: Vec<(Name, LegacyScope<'a>)>,
11201120
macro_map: FxHashMap<DefId, Rc<SyntaxExtension>>,
11211121
macro_exports: Vec<Export>,

src/librustc_resolve/macros.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use {Module, ModuleKind, Resolver};
11+
use {Module, ModuleKind, NameBinding, NameBindingKind, Resolver};
1212
use build_reduced_graph::BuildReducedGraphVisitor;
1313
use resolve_imports::ImportResolver;
1414
use rustc::hir::def_id::{DefId, BUILTIN_MACROS_CRATE, CRATE_DEF_INDEX, DefIndex};
1515
use rustc::hir::def::{Def, Export};
1616
use rustc::hir::map::{self, DefCollector};
17+
use rustc::ty;
1718
use std::cell::Cell;
1819
use std::rc::Rc;
1920
use syntax::ast;
@@ -28,7 +29,7 @@ use syntax::parse::token::intern;
2829
use syntax::ptr::P;
2930
use syntax::util::lev_distance::find_best_match_for_name;
3031
use syntax::visit::Visitor;
31-
use syntax_pos::Span;
32+
use syntax_pos::{Span, DUMMY_SP};
3233

3334
#[derive(Clone)]
3435
pub struct InvocationData<'a> {
@@ -179,7 +180,12 @@ impl<'a> base::Resolver for Resolver<'a> {
179180
index: DefIndex::new(self.macro_map.len()),
180181
};
181182
self.macro_map.insert(def_id, ext);
182-
self.builtin_macros.insert(ident.name, def_id);
183+
let binding = self.arenas.alloc_name_binding(NameBinding {
184+
kind: NameBindingKind::Def(Def::Macro(def_id)),
185+
span: DUMMY_SP,
186+
vis: ty::Visibility::PrivateExternal,
187+
});
188+
self.builtin_macros.insert(ident.name, binding);
183189
}
184190

185191
fn add_expansions_at_stmt(&mut self, id: ast::NodeId, macros: Vec<Mark>) {
@@ -193,8 +199,8 @@ impl<'a> base::Resolver for Resolver<'a> {
193199
fn find_attr_invoc(&mut self, attrs: &mut Vec<ast::Attribute>) -> Option<ast::Attribute> {
194200
for i in 0..attrs.len() {
195201
let name = intern(&attrs[i].name());
196-
match self.builtin_macros.get(&name) {
197-
Some(&def_id) => match *self.get_macro(Def::Macro(def_id)) {
202+
match self.builtin_macros.get(&name).cloned() {
203+
Some(binding) => match *self.get_macro(binding.def()) {
198204
MultiModifier(..) | MultiDecorator(..) | SyntaxExtension::AttrProcMacro(..) => {
199205
return Some(attrs.remove(i))
200206
}
@@ -273,7 +279,7 @@ impl<'a> Resolver<'a> {
273279
if let Some(scope) = possible_time_travel {
274280
self.lexical_macro_resolutions.push((name, scope));
275281
}
276-
self.builtin_macros.get(&name).cloned().map(|def_id| self.get_macro(Def::Macro(def_id)))
282+
self.builtin_macros.get(&name).cloned().map(|binding| self.get_macro(binding.def()))
277283
}
278284

279285
fn suggest_macro_name(&mut self, name: &str, err: &mut DiagnosticBuilder<'a>) {

0 commit comments

Comments
 (0)