let mut edge_list_data = Vec::with_capacity(edge_count);
for _index in 0..node_count {
- d.read_struct(|d| {
- let dep_node: DepNode<K> = 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);
-
- 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 dep_node: DepNode<K> = 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);
+
+ 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<_, _> =
}
impl<D: Decoder> Decodable<D> 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)
}
}
impl<D: Decoder> Decodable<D> 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<BytePos> = 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);
-
- // 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!(),
- };
+ 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<BytePos> = 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);
+
+ // 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);
+ line_start = line_start + BytePos(diff);
- lines.push(line_start);
- }
+ lines.push(line_start);
}
-
- lines
- });
- let multibyte_chars: Vec<MultiByteChar> =
- d.read_struct_field("multibyte_chars", |d| Decodable::decode(d));
- let non_narrow_chars: Vec<NonNarrowChar> =
- 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<NormalizedPos> =
- 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<MultiByteChar> =
+ d.read_struct_field("multibyte_chars", |d| Decodable::decode(d));
+ let non_narrow_chars: Vec<NonNarrowChar> =
+ 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<NormalizedPos> =
+ 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,
+ }
}
}