use crate::resolve_imports::ImportResolver;
use rustc::hir::def_id::{DefId, CRATE_DEF_INDEX, DefIndex,
CrateNum, DefIndexAddressSpace};
-use rustc::hir::def::{Def, NonMacroAttrKind};
+use rustc::hir::def::{self, DefKind, NonMacroAttrKind};
use rustc::hir::map::{self, DefCollector};
use rustc::{ty, lint};
use rustc::{bug, span_bug};
use std::{mem, ptr};
use rustc_data_structures::sync::Lrc;
+type Def = def::Def<ast::NodeId>;
+
#[derive(Clone, Debug)]
pub struct InvocationData<'a> {
def_index: DefIndex,
fn visit_ident(&mut self, ident: Ident) {
if ident.name == keywords::DollarCrate.name() {
let name = match self.resolver.resolve_crate_root(ident).kind {
- ModuleKind::Def(_, name) if name != keywords::Invalid.name() => name,
+ ModuleKind::Def(.., name) if name != keywords::Invalid.name() => name,
_ => keywords::Crate.name(),
};
ident.span.ctxt().set_dollar_crate_name(name);
let kind = ext.kind();
self.macro_map.insert(def_id, ext);
let binding = self.arenas.alloc_name_binding(NameBinding {
- kind: NameBindingKind::Def(Def::Macro(def_id, kind), false),
+ kind: NameBindingKind::Def(Def::Def(DefKind::Macro(kind), def_id), false),
ambiguity: None,
span: DUMMY_SP,
vis: ty::Visibility::Public,
Err(determinacy) => return Err(determinacy),
};
- if let Def::Macro(def_id, _) = def {
+ if let Def::Def(DefKind::Macro(_), def_id) = def {
if after_derive {
self.session.span_err(invoc.span(),
"macro attributes must be placed before `#[derive]`");
let def = def?;
match def {
- Def::Macro(def_id, macro_kind) => {
+ Def::Def(DefKind::Macro(macro_kind), def_id) => {
self.unused_macros.remove(&def_id);
if macro_kind == MacroKind::ProcMacroStub {
let msg = "can't use a procedural macro from the same crate that defines it";
Def::Err => {
return Err(Determinacy::Determined);
}
- _ => panic!("expected `Def::Macro` or `Def::NonMacroAttr`"),
+ _ => panic!("expected `DefKind::Macro` or `Def::NonMacroAttr`"),
}
Ok((def, self.get_macro(def)))
let attr_candidates = BUILTIN_ATTRIBUTES
.iter()
- .filter_map(|(name, _, _, gate)| {
- if name.starts_with("rustc_") && !features.rustc_attrs {
+ .filter_map(|&(name, _, _, ref gate)| {
+ if name.as_str().starts_with("rustc_") && !features.rustc_attrs {
return None;
}
_ => None,
}
})
- .map(|name| Symbol::intern(name))
.chain(
// Add built-in macro attributes as well.
self.builtin_macros.iter().filter_map(|(name, binding)| {
// Then check modules.
}).or_else(|| {
let is_macro = |def| {
- if let Def::Macro(_, def_kind) = def {
+ if let Def::Def(DefKind::Macro(def_kind), _) = def {
def_kind == kind
} else {
false
if def.legacy {
let ident = ident.modern();
self.macro_names.insert(ident);
- let def = Def::Macro(def_id, MacroKind::Bang);
+ let def = Def::Def(DefKind::Macro(MacroKind::Bang), def_id);
let is_macro_export = attr::contains_name(&item.attrs, "macro_export");
let vis = if is_macro_export {
ty::Visibility::Public
}
} else {
let module = self.current_module;
- let def = Def::Macro(def_id, MacroKind::Bang);
+ let def = Def::Def(DefKind::Macro(MacroKind::Bang), def_id);
let vis = self.resolve_visibility(&item.vis);
if vis != ty::Visibility::Public {
self.unused_macros.insert(def_id);