diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2022-07-06 11:11:11 +0200 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2022-08-30 19:06:12 +0200 |
| commit | b0b46c0a105a7b3144c28440c8ec5a7e182bf0e5 (patch) | |
| tree | 3e005de7dd844950c1876774113e8bdb4b810f18 /compiler/rustc_metadata/src | |
| parent | c485fccd8110bc3dc85187d1487d614c771e5362 (diff) | |
| download | rust-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.rs | 13 | ||||
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/encoder.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/mod.rs | 4 |
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, ()>, |
