]> git.lizzy.rs Git - rust.git/commitdiff
Support `#[rustc_builtin_macro = "builtin_name"]`
authorJonas Schievink <jonasschievink@gmail.com>
Sat, 3 Apr 2021 01:13:04 +0000 (03:13 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Sat, 3 Apr 2021 01:13:04 +0000 (03:13 +0200)
crates/hir_def/src/nameres/collector.rs

index 6f946a6dd9a9e12f059a74ec2d430232591934f0..c8f49470788bf602c101ac778e41c532095e5ae3 100644 (file)
@@ -1402,8 +1402,18 @@ fn collect_macro_rules(&mut self, id: FileItemTreeId<MacroRules>) {
 
         // Case 1: builtin macros
         if attrs.by_key("rustc_builtin_macro").exists() {
+            // `#[rustc_builtin_macro = "builtin_name"]` overrides the `macro_rules!` name.
+            let name;
+            let name = match attrs.by_key("rustc_builtin_macro").string_value() {
+                Some(it) => {
+                    // FIXME: a hacky way to create a Name from string.
+                    name = tt::Ident { text: it.clone(), id: tt::TokenId::unspecified() }.as_name();
+                    &name
+                }
+                None => &mac.name,
+            };
             let krate = self.def_collector.def_map.krate;
-            if let Some(macro_id) = find_builtin_macro(&mac.name, krate, ast_id) {
+            if let Some(macro_id) = find_builtin_macro(name, krate, ast_id) {
                 self.def_collector.define_macro_rules(
                     self.module_id,
                     mac.name.clone(),