Auto merge of #83273 - cjgillot:endecode, r=michaelwoerister
Simplify encoder and decoder Extracted from https://github.com/rust-lang/rust/pull/83036 and https://github.com/rust-lang/rust/pull/82780.
This commit is contained in:
commit
d04c3aa865
11 changed files with 126 additions and 158 deletions
|
@ -7,7 +7,6 @@ use crate::rmeta::*;
|
|||
use rustc_ast as ast;
|
||||
use rustc_attr as attr;
|
||||
use rustc_data_structures::captures::Captures;
|
||||
use rustc_data_structures::fingerprint::{Fingerprint, FingerprintDecoder};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::svh::Svh;
|
||||
use rustc_data_structures::sync::{Lock, LockGuard, Lrc, OnceCell};
|
||||
|
@ -351,12 +350,6 @@ impl<'a, 'tcx> Decodable<DecodeContext<'a, 'tcx>> for DefIndex {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> FingerprintDecoder for DecodeContext<'a, 'tcx> {
|
||||
fn decode_fingerprint(&mut self) -> Result<Fingerprint, String> {
|
||||
Fingerprint::decode_opaque(&mut self.opaque)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> Decodable<DecodeContext<'a, 'tcx>> for SyntaxContext {
|
||||
fn decode(decoder: &mut DecodeContext<'a, 'tcx>) -> Result<SyntaxContext, String> {
|
||||
let cdata = decoder.cdata();
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use crate::rmeta::table::{FixedSizeEncoding, TableBuilder};
|
||||
use crate::rmeta::*;
|
||||
|
||||
use rustc_data_structures::fingerprint::{Fingerprint, FingerprintEncoder};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
||||
use rustc_data_structures::stable_hasher::StableHasher;
|
||||
use rustc_data_structures::sync::{join, par_iter, Lrc, ParallelIterator};
|
||||
|
@ -116,6 +115,7 @@ impl<'a, 'tcx> Encoder for EncodeContext<'a, 'tcx> {
|
|||
emit_f32(f32);
|
||||
emit_char(char);
|
||||
emit_str(&str);
|
||||
emit_raw_bytes(&[u8]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -307,12 +307,6 @@ impl<'a, 'tcx> Encodable<EncodeContext<'a, 'tcx>> for Span {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> FingerprintEncoder for EncodeContext<'a, 'tcx> {
|
||||
fn encode_fingerprint(&mut self, f: &Fingerprint) -> Result<(), Self::Error> {
|
||||
self.opaque.encode_fingerprint(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> TyEncoder<'tcx> for EncodeContext<'a, 'tcx> {
|
||||
const CLEAR_CROSS_CRATE: bool = true;
|
||||
|
||||
|
@ -2064,10 +2058,10 @@ pub(super) fn encode_metadata(tcx: TyCtxt<'_>) -> EncodedMetadata {
|
|||
|
||||
fn encode_metadata_impl(tcx: TyCtxt<'_>) -> EncodedMetadata {
|
||||
let mut encoder = opaque::Encoder::new(vec![]);
|
||||
encoder.emit_raw_bytes(METADATA_HEADER);
|
||||
encoder.emit_raw_bytes(METADATA_HEADER).unwrap();
|
||||
|
||||
// Will be filled with the root position after encoding everything.
|
||||
encoder.emit_raw_bytes(&[0, 0, 0, 0]);
|
||||
encoder.emit_raw_bytes(&[0, 0, 0, 0]).unwrap();
|
||||
|
||||
let source_map_files = tcx.sess.source_map().files();
|
||||
let source_file_cache = (source_map_files[0].clone(), 0);
|
||||
|
|
|
@ -2,6 +2,7 @@ use crate::rmeta::*;
|
|||
|
||||
use rustc_index::vec::Idx;
|
||||
use rustc_serialize::opaque::Encoder;
|
||||
use rustc_serialize::Encoder as _;
|
||||
use std::convert::TryInto;
|
||||
use std::marker::PhantomData;
|
||||
use std::num::NonZeroUsize;
|
||||
|
@ -172,7 +173,7 @@ where
|
|||
|
||||
pub(crate) fn encode(&self, buf: &mut Encoder) -> Lazy<Table<I, T>> {
|
||||
let pos = buf.position();
|
||||
buf.emit_raw_bytes(&self.bytes);
|
||||
buf.emit_raw_bytes(&self.bytes).unwrap();
|
||||
Lazy::from_position_and_meta(NonZeroUsize::new(pos as usize).unwrap(), self.bytes.len())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue