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
|
@ -285,7 +285,7 @@ impl<'a> ResolverExpand for Resolver<'a> {
|
|||
helper_attrs.extend(
|
||||
ext.helper_attrs.iter().map(|name| Ident::new(*name, span)),
|
||||
);
|
||||
if ext.is_derive_copy {
|
||||
if ext.builtin_name == Some(sym::Copy) {
|
||||
self.containers_deriving_copy.insert(invoc_id);
|
||||
}
|
||||
ext
|
||||
|
@ -1089,9 +1089,9 @@ impl<'a> Resolver<'a> {
|
|||
edition,
|
||||
);
|
||||
|
||||
if result.is_builtin {
|
||||
if let Some(builtin_name) = result.builtin_name {
|
||||
// The macro was marked with `#[rustc_builtin_macro]`.
|
||||
if let Some(builtin_macro) = self.builtin_macros.get_mut(&item.ident.name) {
|
||||
if let Some(builtin_macro) = self.builtin_macros.get_mut(&builtin_name) {
|
||||
// The macro is a built-in, replace its expander function
|
||||
// while still taking everything else from the source code.
|
||||
// If we already loaded this builtin macro, give a better error message than 'no such builtin macro'.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue