Allow #[rustc_builtin_macro = "name"].
This makes it possible to have both std::panic and core::panic as a builtin macro, by using different builtin macro names for each. Also removes SyntaxExtension::is_derive_copy, as the macro name (e.g. sym::Copy) is now tracked and provides that information directly.
This commit is contained in:
parent
1f9dc9a182
commit
d651fa78ce
5 changed files with 11 additions and 15 deletions
|
@ -728,9 +728,7 @@ pub struct SyntaxExtension {
|
|||
pub edition: Edition,
|
||||
/// Built-in macros have a couple of special properties like availability
|
||||
/// in `#[no_implicit_prelude]` modules, so we have to keep this flag.
|
||||
pub is_builtin: bool,
|
||||
/// We have to identify macros providing a `Copy` impl early for compatibility reasons.
|
||||
pub is_derive_copy: bool,
|
||||
pub builtin_name: Option<Symbol>,
|
||||
}
|
||||
|
||||
impl SyntaxExtension {
|
||||
|
@ -758,8 +756,7 @@ impl SyntaxExtension {
|
|||
deprecation: None,
|
||||
helper_attrs: Vec::new(),
|
||||
edition,
|
||||
is_builtin: false,
|
||||
is_derive_copy: false,
|
||||
builtin_name: None,
|
||||
kind,
|
||||
}
|
||||
}
|
||||
|
@ -785,7 +782,7 @@ impl SyntaxExtension {
|
|||
}
|
||||
}
|
||||
|
||||
let is_builtin = sess.contains_name(attrs, sym::rustc_builtin_macro);
|
||||
let builtin_name = sess.find_by_name(attrs, sym::rustc_builtin_macro).map(|a| a.value_str().unwrap_or(name));
|
||||
let (stability, const_stability) = attr::find_stability(&sess, attrs, span);
|
||||
if const_stability.is_some() {
|
||||
sess.parse_sess
|
||||
|
@ -803,8 +800,7 @@ impl SyntaxExtension {
|
|||
deprecation: attr::find_deprecation(&sess, attrs).map(|(d, _)| d),
|
||||
helper_attrs,
|
||||
edition,
|
||||
is_builtin,
|
||||
is_derive_copy: is_builtin && name == sym::Copy,
|
||||
builtin_name,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue