diff --git a/compiler/rustc_macros/src/serialize.rs b/compiler/rustc_macros/src/serialize.rs index 2c4b794ffa1..af8b85f25fd 100644 --- a/compiler/rustc_macros/src/serialize.rs +++ b/compiler/rustc_macros/src/serialize.rs @@ -42,15 +42,7 @@ fn decodable_body( } let ty_name = s.ast().ident.to_string(); let decode_body = match s.variants() { - [vi] => { - let construct = vi.construct(|field, index| decode_field(field, index, true)); - quote! { - ::rustc_serialize::Decoder::read_struct( - __decoder, - |__decoder| { #construct }, - ) - } - } + [vi] => vi.construct(|field, index| decode_field(field, index, true)), variants => { let match_inner: TokenStream = variants .iter() diff --git a/compiler/rustc_query_system/src/dep_graph/serialized.rs b/compiler/rustc_query_system/src/dep_graph/serialized.rs index c95dff13d66..8c85605c030 100644 --- a/compiler/rustc_query_system/src/dep_graph/serialized.rs +++ b/compiler/rustc_query_system/src/dep_graph/serialized.rs @@ -122,29 +122,26 @@ impl<'a, K: DepKind + Decodable>> Decodable = d.read_struct_field("node", Decodable::decode); - let _i: SerializedDepNodeIndex = nodes.push(dep_node); - debug_assert_eq!(_i.index(), _index); + let dep_node: DepNode = d.read_struct_field("node", Decodable::decode); + let _i: SerializedDepNodeIndex = nodes.push(dep_node); + debug_assert_eq!(_i.index(), _index); - let fingerprint: Fingerprint = - d.read_struct_field("fingerprint", Decodable::decode); - let _i: SerializedDepNodeIndex = fingerprints.push(fingerprint); - debug_assert_eq!(_i.index(), _index); + let fingerprint: Fingerprint = d.read_struct_field("fingerprint", Decodable::decode); + let _i: SerializedDepNodeIndex = fingerprints.push(fingerprint); + debug_assert_eq!(_i.index(), _index); - d.read_struct_field("edges", |d| { - d.read_seq(|d, len| { - let start = edge_list_data.len().try_into().unwrap(); - for _ in 0..len { - let edge = d.read_seq_elt(Decodable::decode); - edge_list_data.push(edge); - } - let end = edge_list_data.len().try_into().unwrap(); - let _i: SerializedDepNodeIndex = edge_list_indices.push((start, end)); - debug_assert_eq!(_i.index(), _index); - }) + d.read_struct_field("edges", |d| { + d.read_seq(|d, len| { + let start = edge_list_data.len().try_into().unwrap(); + for _ in 0..len { + let edge = d.read_seq_elt(Decodable::decode); + edge_list_data.push(edge); + } + let end = edge_list_data.len().try_into().unwrap(); + let _i: SerializedDepNodeIndex = edge_list_indices.push((start, end)); + debug_assert_eq!(_i.index(), _index); }) - }); + }) } let index: FxHashMap<_, _> = diff --git a/compiler/rustc_serialize/src/serialize.rs b/compiler/rustc_serialize/src/serialize.rs index 5e62a0f1eb2..1ce62d1224b 100644 --- a/compiler/rustc_serialize/src/serialize.rs +++ b/compiler/rustc_serialize/src/serialize.rs @@ -210,14 +210,6 @@ pub trait Decoder { f(self, disr) } - #[inline] - fn read_struct(&mut self, f: F) -> T - where - F: FnOnce(&mut Self) -> T, - { - f(self) - } - #[inline] fn read_struct_field(&mut self, _f_name: &str, f: F) -> T where diff --git a/compiler/rustc_span/src/def_id.rs b/compiler/rustc_span/src/def_id.rs index 147c1f9e043..5b6f110413a 100644 --- a/compiler/rustc_span/src/def_id.rs +++ b/compiler/rustc_span/src/def_id.rs @@ -299,10 +299,10 @@ impl Encodable for DefId { impl Decodable for DefId { default fn decode(d: &mut D) -> DefId { - d.read_struct(|d| DefId { + DefId { krate: d.read_struct_field("krate", Decodable::decode), index: d.read_struct_field("index", Decodable::decode), - }) + } } } diff --git a/compiler/rustc_span/src/lib.rs b/compiler/rustc_span/src/lib.rs index 5991b4d217c..93f45985a7c 100644 --- a/compiler/rustc_span/src/lib.rs +++ b/compiler/rustc_span/src/lib.rs @@ -979,12 +979,10 @@ impl Encodable for Span { } impl Decodable for Span { default fn decode(s: &mut D) -> Span { - s.read_struct(|d| { - let lo = d.read_struct_field("lo", Decodable::decode); - let hi = d.read_struct_field("hi", Decodable::decode); + let lo = s.read_struct_field("lo", Decodable::decode); + let hi = s.read_struct_field("hi", Decodable::decode); - Span::new(lo, hi, SyntaxContext::root(), None) - }) + Span::new(lo, hi, SyntaxContext::root(), None) } } @@ -1440,65 +1438,62 @@ impl Encodable for SourceFile { impl Decodable for SourceFile { fn decode(d: &mut D) -> SourceFile { - d.read_struct(|d| { - let name: FileName = d.read_struct_field("name", |d| Decodable::decode(d)); - let src_hash: SourceFileHash = - d.read_struct_field("src_hash", |d| Decodable::decode(d)); - let start_pos: BytePos = d.read_struct_field("start_pos", |d| Decodable::decode(d)); - let end_pos: BytePos = d.read_struct_field("end_pos", |d| Decodable::decode(d)); - let lines: Vec = d.read_struct_field("lines", |d| { - let num_lines: u32 = Decodable::decode(d); - let mut lines = Vec::with_capacity(num_lines as usize); + let name: FileName = d.read_struct_field("name", |d| Decodable::decode(d)); + let src_hash: SourceFileHash = d.read_struct_field("src_hash", |d| Decodable::decode(d)); + let start_pos: BytePos = d.read_struct_field("start_pos", |d| Decodable::decode(d)); + let end_pos: BytePos = d.read_struct_field("end_pos", |d| Decodable::decode(d)); + let lines: Vec = d.read_struct_field("lines", |d| { + let num_lines: u32 = Decodable::decode(d); + let mut lines = Vec::with_capacity(num_lines as usize); - if num_lines > 0 { - // Read the number of bytes used per diff. - let bytes_per_diff: u8 = Decodable::decode(d); + if num_lines > 0 { + // Read the number of bytes used per diff. + let bytes_per_diff: u8 = Decodable::decode(d); + + // Read the first element. + let mut line_start: BytePos = Decodable::decode(d); + lines.push(line_start); + + for _ in 1..num_lines { + let diff = match bytes_per_diff { + 1 => d.read_u8() as u32, + 2 => d.read_u16() as u32, + 4 => d.read_u32(), + _ => unreachable!(), + }; + + line_start = line_start + BytePos(diff); - // Read the first element. - let mut line_start: BytePos = Decodable::decode(d); lines.push(line_start); - - for _ in 1..num_lines { - let diff = match bytes_per_diff { - 1 => d.read_u8() as u32, - 2 => d.read_u16() as u32, - 4 => d.read_u32(), - _ => unreachable!(), - }; - - line_start = line_start + BytePos(diff); - - lines.push(line_start); - } } - - lines - }); - let multibyte_chars: Vec = - d.read_struct_field("multibyte_chars", |d| Decodable::decode(d)); - let non_narrow_chars: Vec = - d.read_struct_field("non_narrow_chars", |d| Decodable::decode(d)); - let name_hash: u128 = d.read_struct_field("name_hash", |d| Decodable::decode(d)); - let normalized_pos: Vec = - d.read_struct_field("normalized_pos", |d| Decodable::decode(d)); - let cnum: CrateNum = d.read_struct_field("cnum", |d| Decodable::decode(d)); - SourceFile { - name, - start_pos, - end_pos, - src: None, - src_hash, - // Unused - the metadata decoder will construct - // a new SourceFile, filling in `external_src` properly - external_src: Lock::new(ExternalSource::Unneeded), - lines, - multibyte_chars, - non_narrow_chars, - normalized_pos, - name_hash, - cnum, } - }) + + lines + }); + let multibyte_chars: Vec = + d.read_struct_field("multibyte_chars", |d| Decodable::decode(d)); + let non_narrow_chars: Vec = + d.read_struct_field("non_narrow_chars", |d| Decodable::decode(d)); + let name_hash: u128 = d.read_struct_field("name_hash", |d| Decodable::decode(d)); + let normalized_pos: Vec = + d.read_struct_field("normalized_pos", |d| Decodable::decode(d)); + let cnum: CrateNum = d.read_struct_field("cnum", |d| Decodable::decode(d)); + SourceFile { + name, + start_pos, + end_pos, + src: None, + src_hash, + // Unused - the metadata decoder will construct + // a new SourceFile, filling in `external_src` properly + external_src: Lock::new(ExternalSource::Unneeded), + lines, + multibyte_chars, + non_narrow_chars, + normalized_pos, + name_hash, + cnum, + } } }