diff options
| author | bors <bors@rust-lang.org> | 2022-08-24 16:56:32 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-24 16:56:32 +0000 |
| commit | ebfc7aa53185617f14e1e15bef8ef5b4505b5397 (patch) | |
| tree | 84e41374423ad00866a502792ba13bdfa7d3eb48 /compiler/rustc_query_impl | |
| parent | 4a24f08ba43166cfee86d868b3fe8612aec6faca (diff) | |
| parent | f6329485a83c1d241635e0dedbf62929e193b10a (diff) | |
| download | rust-ebfc7aa53185617f14e1e15bef8ef5b4505b5397.tar.gz rust-ebfc7aa53185617f14e1e15bef8ef5b4505b5397.zip | |
Auto merge of #100803 - klensy:do-not-encode-preinterned-symbols, r=bjorn3
Symbols: do not write string values of preinterned symbols into compiled artifacts r? `@bjorn3` Followup for #98851 https://github.com/rust-lang/rust/pull/98851#issuecomment-1215606291
Diffstat (limited to 'compiler/rustc_query_impl')
| -rw-r--r-- | compiler/rustc_query_impl/src/on_disk_cache.rs | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/compiler/rustc_query_impl/src/on_disk_cache.rs b/compiler/rustc_query_impl/src/on_disk_cache.rs index 6711dd3d5c5..5ef95911f56 100644 --- a/compiler/rustc_query_impl/src/on_disk_cache.rs +++ b/compiler/rustc_query_impl/src/on_disk_cache.rs @@ -42,6 +42,7 @@ const TAG_EXPN_DATA: u8 = 1; // Tags for encoding Symbol's const SYMBOL_STR: u8 = 0; const SYMBOL_OFFSET: u8 = 1; +const SYMBOL_PREINTERNED: u8 = 2; /// Provides an interface to incremental compilation data cached from the /// previous compilation session. This data will eventually include the results @@ -745,6 +746,10 @@ impl<'a, 'tcx> Decodable<CacheDecoder<'a, 'tcx>> for Symbol { sym } + SYMBOL_PREINTERNED => { + let symbol_index = d.read_u32(); + Symbol::new_from_decoded(symbol_index) + } _ => unreachable!(), } } @@ -939,17 +944,24 @@ impl<'a, 'tcx> Encodable<CacheEncoder<'a, 'tcx>> for Span { // copy&paste impl from rustc_metadata impl<'a, 'tcx> Encodable<CacheEncoder<'a, 'tcx>> for Symbol { fn encode(&self, s: &mut CacheEncoder<'a, 'tcx>) { - match s.symbol_table.entry(*self) { - Entry::Vacant(o) => { - s.encoder.emit_u8(SYMBOL_STR); - let pos = s.encoder.position(); - o.insert(pos); - s.emit_str(self.as_str()); - } - Entry::Occupied(o) => { - let x = o.get().clone(); - s.emit_u8(SYMBOL_OFFSET); - s.emit_usize(x); + // if symbol preinterned, emit tag and symbol index + if self.is_preinterned() { + s.encoder.emit_u8(SYMBOL_PREINTERNED); + s.encoder.emit_u32(self.as_u32()); + } else { + // otherwise write it as string or as offset to it + match s.symbol_table.entry(*self) { + Entry::Vacant(o) => { + s.encoder.emit_u8(SYMBOL_STR); + let pos = s.encoder.position(); + o.insert(pos); + s.emit_str(self.as_str()); + } + Entry::Occupied(o) => { + let x = o.get().clone(); + s.emit_u8(SYMBOL_OFFSET); + s.emit_usize(x); + } } } } |
