about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2021-06-27 20:06:26 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2021-07-17 19:41:10 +0200
commit41c1f39fa8317fc16779ceda7536fe93f1c89c34 (patch)
tree1d401468acc049864bd3cc7b879076f1fbf9a175
parentdbd2d77641e87ac841d12db1ca8e1f38d96f85d3 (diff)
downloadrust-41c1f39fa8317fc16779ceda7536fe93f1c89c34.tar.gz
rust-41c1f39fa8317fc16779ceda7536fe93f1c89c34.zip
Drop ExpnData::krate.
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder.rs2
-rw-r--r--compiler/rustc_span/src/hygiene.rs29
2 files changed, 11 insertions, 20 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs
index a3f8c7e771b..8bdd4313de4 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder.rs
@@ -1653,7 +1653,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
         };
 
         let data = self.root.expn_data.get(self, index).unwrap().decode(self);
-        rustc_span::hygiene::register_expn_id(index, data, hash)
+        rustc_span::hygiene::register_expn_id(self.cnum, index, data, hash)
     }
 
     /// Imports the source_map from an external crate into the source_map of the crate
diff --git a/compiler/rustc_span/src/hygiene.rs b/compiler/rustc_span/src/hygiene.rs
index 32149f1550e..49ad40fdf4d 100644
--- a/compiler/rustc_span/src/hygiene.rs
+++ b/compiler/rustc_span/src/hygiene.rs
@@ -184,7 +184,6 @@ impl LocalExpnId {
         HygieneData::with(|data| {
             let old_expn_data = &mut data.local_expn_data[self];
             assert!(old_expn_data.is_none(), "expansion data is reset for an expansion ID");
-            debug_assert_eq!(expn_data.krate, LOCAL_CRATE);
             *old_expn_data = Some(expn_data);
         });
         update_disambiguator(self, ctx)
@@ -337,11 +336,7 @@ impl HygieneData {
     }
 
     fn fresh_expn(&mut self, expn_data: Option<ExpnData>) -> LocalExpnId {
-        if let Some(data) = &expn_data {
-            debug_assert_eq!(data.krate, LOCAL_CRATE);
-        }
-        let expn_id = self.local_expn_data.next_index();
-        self.local_expn_data.push(expn_data);
+        let expn_id = self.local_expn_data.push(expn_data);
         let _eid = self.local_expn_hashes.push(ExpnHash(Fingerprint::ZERO));
         debug_assert_eq!(expn_id, _eid);
         expn_id
@@ -873,12 +868,6 @@ pub struct ExpnData {
     /// call_site span would have its own ExpnData, with the call_site
     /// pointing to the `foo!` invocation.
     pub call_site: Span,
-    /// The crate that originally created this `ExpnData`. During
-    /// metadata serialization, we only encode `ExpnData`s that were
-    /// created locally - when our serialized metadata is decoded,
-    /// foreign `ExpnId`s will have their `ExpnData` looked up
-    /// from the crate specified by `Crate
-    krate: CrateNum,
     /// Used to force two `ExpnData`s to have different `Fingerprint`s.
     /// Due to macro expansion, it's possible to end up with two `ExpnId`s
     /// that have identical `ExpnData`s. This violates the contract of `HashStable`
@@ -944,7 +933,6 @@ impl ExpnData {
             edition,
             macro_def_id,
             parent_module,
-            krate: LOCAL_CRATE,
             disambiguator: 0,
         }
     }
@@ -968,7 +956,6 @@ impl ExpnData {
             edition,
             macro_def_id,
             parent_module,
-            krate: LOCAL_CRATE,
             disambiguator: 0,
         }
     }
@@ -1222,8 +1209,13 @@ pub fn register_local_expn_id(data: ExpnData, hash: ExpnHash) -> ExpnId {
 }
 
 /// Register an expansion which has been decoded from the metadata of a foreign crate.
-pub fn register_expn_id(local_id: ExpnIndex, data: ExpnData, hash: ExpnHash) -> ExpnId {
-    let expn_id = ExpnId { krate: data.krate, local_id };
+pub fn register_expn_id(
+    krate: CrateNum,
+    local_id: ExpnIndex,
+    data: ExpnData,
+    hash: ExpnHash,
+) -> ExpnId {
+    let expn_id = ExpnId { krate, local_id };
     HygieneData::with(|hygiene_data| {
         let _old_data = hygiene_data.foreign_expn_data.insert(expn_id, data);
         debug_assert!(_old_data.is_none());
@@ -1260,9 +1252,8 @@ pub fn decode_expn_id(
     // Don't decode the data inside `HygieneData::with`, since we need to recursively decode
     // other ExpnIds
     let (expn_data, hash) = decode_data(expn_id);
-    debug_assert_eq!(krate, expn_data.krate);
 
-    register_expn_id(index, expn_data, hash)
+    register_expn_id(krate, index, expn_data, hash)
 }
 
 // Decodes `SyntaxContext`, using the provided `HygieneDecodeContext`
@@ -1420,7 +1411,7 @@ impl<D: Decoder> Decodable<D> for SyntaxContext {
 /// This method is called only when an `ExpnData` is first associated
 /// with an `ExpnId` (when the `ExpnId` is initially constructed, or via
 /// `set_expn_data`). It is *not* called for foreign `ExpnId`s deserialized
-/// from another crate's metadata - since `ExpnData` includes a `krate` field,
+/// from another crate's metadata - since `ExpnHash` includes the stable crate id,
 /// collisions are only possible between `ExpnId`s within the same crate.
 fn update_disambiguator(expn_id: LocalExpnId, mut ctx: impl HashStableContext) {
     let mut expn_data = expn_id.expn_data();