Delete Decoder::read_struct
This commit is contained in:
parent
a421b631ba
commit
c021ba48a7
5 changed files with 74 additions and 98 deletions
|
@ -299,10 +299,10 @@ impl<E: Encoder> Encodable<E> for DefId {
|
|||
|
||||
impl<D: Decoder> Decodable<D> 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),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -979,12 +979,10 @@ impl<E: Encoder> Encodable<E> for Span {
|
|||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1440,65 +1438,62 @@ impl<S: Encoder> Encodable<S> for SourceFile {
|
|||
|
||||
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);
|
||||
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);
|
||||
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<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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue