From 2fe37c5bd1cc7d6cfa176f408c2b834e1b2617bf Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 27 Jun 2021 10:38:06 +0200 Subject: Choose encoding format in caller code. --- compiler/rustc_metadata/src/rmeta/decoder.rs | 9 +++++++-- compiler/rustc_metadata/src/rmeta/encoder.rs | 10 +++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'compiler/rustc_metadata/src') diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs index 4b72ac86957..8b8ca987b38 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder.rs @@ -377,7 +377,11 @@ impl<'a, 'tcx> Decodable> for ExpnId { let local_cdata = decoder.cdata(); let sess = decoder.sess.unwrap(); - rustc_span::hygiene::decode_expn_id(decoder, |cnum, index| { + let cnum = CrateNum::decode(decoder)?; + let index = u32::decode(decoder)?; + + let expn_id = rustc_span::hygiene::decode_expn_id(cnum, index, |expn_id| { + let ExpnId { krate: cnum, local_id: index } = expn_id; // Lookup local `ExpnData`s in our own crate data. Foreign `ExpnData`s // are stored in the owning crate, to avoid duplication. debug_assert_ne!(cnum, LOCAL_CRATE); @@ -399,7 +403,8 @@ impl<'a, 'tcx> Decodable> for ExpnId { .unwrap() .decode((&crate_data, sess)); (expn_data, expn_hash) - }) + }); + Ok(expn_id) } } diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index 4684daef4a1..6877d6ef542 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -182,7 +182,15 @@ impl<'a, 'tcx> Encodable> for SyntaxContext { impl<'a, 'tcx> Encodable> for ExpnId { fn encode(&self, s: &mut EncodeContext<'a, 'tcx>) -> opaque::EncodeResult { - rustc_span::hygiene::raw_encode_expn_id(*self, &s.hygiene_ctxt, s) + if self.krate == LOCAL_CRATE { + // We will only write details for local expansions. Non-local expansions will fetch + // data from the corresponding crate's metadata. + // FIXME(#43047) FIXME(#74731) We may eventually want to avoid relying on external + // metadata from proc-macro crates. + s.hygiene_ctxt.schedule_expn_data_for_encoding(*self); + } + self.krate.encode(s)?; + self.local_id.encode(s) } } -- cgit 1.4.1-3-g733a5