about summary refs log tree commit diff
path: root/compiler/rustc_metadata/src
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2022-07-06 11:11:11 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2022-08-30 19:06:12 +0200
commitb0b46c0a105a7b3144c28440c8ec5a7e182bf0e5 (patch)
tree3e005de7dd844950c1876774113e8bdb4b810f18 /compiler/rustc_metadata/src
parentc485fccd8110bc3dc85187d1487d614c771e5362 (diff)
downloadrust-b0b46c0a105a7b3144c28440c8ec5a7e182bf0e5.tar.gz
rust-b0b46c0a105a7b3144c28440c8ec5a7e182bf0e5.zip
Separate macro_rules and macro_definition.
Diffstat (limited to 'compiler/rustc_metadata/src')
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder.rs13
-rw-r--r--compiler/rustc_metadata/src/rmeta/encoder.rs5
-rw-r--r--compiler/rustc_metadata/src/rmeta/mod.rs4
3 files changed, 12 insertions, 10 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs
index 8ebc0c4700e..a540c4606c9 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder.rs
@@ -1010,13 +1010,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
                 let span = self.get_span(child_index, sess);
                 let macro_rules = match kind {
                     DefKind::Macro(..) => {
-                        self.root
-                            .tables
-                            .macro_definition
-                            .get(self, child_index)
-                            .unwrap()
-                            .decode((self, sess))
-                            .macro_rules
+                        self.root.tables.macro_rules.get(self, child_index).is_some()
                     }
                     _ => false,
                 };
@@ -1326,7 +1320,10 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
     fn get_macro(self, id: DefIndex, sess: &Session) -> ast::MacroDef {
         match self.def_kind(id) {
             DefKind::Macro(_) => {
-                self.root.tables.macro_definition.get(self, id).unwrap().decode((self, sess))
+                let macro_rules = self.root.tables.macro_rules.get(self, id).is_some();
+                let body =
+                    self.root.tables.macro_definition.get(self, id).unwrap().decode((self, sess));
+                ast::MacroDef { macro_rules, body: ast::ptr::P(body) }
             }
             _ => bug!(),
         }
diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs
index 927db8a6ab6..1288d19cb08 100644
--- a/compiler/rustc_metadata/src/rmeta/encoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/encoder.rs
@@ -1494,7 +1494,10 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
                 self.tables.constness.set(def_id.index, sig.header.constness);
             }
             hir::ItemKind::Macro(ref macro_def, _) => {
-                record!(self.tables.macro_definition[def_id] <- macro_def);
+                if macro_def.macro_rules {
+                    self.tables.macro_rules.set(def_id.index, ());
+                }
+                record!(self.tables.macro_definition[def_id] <- &*macro_def.body);
             }
             hir::ItemKind::Mod(ref m) => {
                 return self.encode_info_for_mod(item.def_id, m);
diff --git a/compiler/rustc_metadata/src/rmeta/mod.rs b/compiler/rustc_metadata/src/rmeta/mod.rs
index 04136b68134..bb5b40bcc5b 100644
--- a/compiler/rustc_metadata/src/rmeta/mod.rs
+++ b/compiler/rustc_metadata/src/rmeta/mod.rs
@@ -394,7 +394,9 @@ define_tables! {
     may_have_doc_links: Table<DefIndex, ()>,
     variant_data: Table<DefIndex, LazyValue<VariantData>>,
     assoc_container: Table<DefIndex, ty::AssocItemContainer>,
-    macro_definition: Table<DefIndex, LazyValue<ast::MacroDef>>,
+    // Slot is full when macro is macro_rules.
+    macro_rules: Table<DefIndex, ()>,
+    macro_definition: Table<DefIndex, LazyValue<ast::MacArgs>>,
     proc_macro: Table<DefIndex, MacroKind>,
     // Slot is full when there is a self parameter.
     fn_has_self_parameter: Table<DefIndex, ()>,