mirror of
https://github.com/fluencelabs/parity-wasm
synced 2025-05-23 20:51:33 +00:00
simplify section reader
This commit is contained in:
parent
3e5d6e1017
commit
7cf8a7a16b
@ -218,22 +218,6 @@ impl Section {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_entries<R: io::Read, T: Deserialize<Error=::elements::Error>>(
|
|
||||||
reader: &mut R,
|
|
||||||
defined_length: usize,
|
|
||||||
) -> Result<Vec<T>, ::elements::Error>
|
|
||||||
{
|
|
||||||
let inner_buffer = buffered_read!(ENTRIES_BUFFER_LENGTH, defined_length, reader);
|
|
||||||
let buf_length = inner_buffer.len();
|
|
||||||
let mut cursor = io::Cursor::new(inner_buffer);
|
|
||||||
let result = Ok(CountedList::<T>::deserialize(&mut cursor)?.into_inner());
|
|
||||||
if cursor.position() != buf_length as u64 {
|
|
||||||
Err(io::Error::from(io::ErrorKind::InvalidData).into())
|
|
||||||
} else {
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) struct SectionReader {
|
pub(crate) struct SectionReader {
|
||||||
cursor: io::Cursor<Vec<u8>>,
|
cursor: io::Cursor<Vec<u8>>,
|
||||||
declared_length: usize,
|
declared_length: usize,
|
||||||
@ -270,11 +254,13 @@ impl io::Read for SectionReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub (crate) fn read_entries_with_len<R: io::Read, T: Deserialize<Error=::elements::Error>>(reader: &mut R)
|
fn read_entries<R: io::Read, T: Deserialize<Error=::elements::Error>>(reader: &mut R)
|
||||||
-> Result<Vec<T>, ::elements::Error>
|
-> Result<Vec<T>, ::elements::Error>
|
||||||
{
|
{
|
||||||
let length = u32::from(VarUint32::deserialize(reader)?) as usize;
|
let mut section_reader = SectionReader::new(reader)?;
|
||||||
read_entries(reader, length)
|
let result = CountedList::<T>::deserialize(&mut section_reader)?.into_inner();
|
||||||
|
section_reader.close()?;
|
||||||
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Custom section
|
/// Custom section
|
||||||
@ -359,7 +345,7 @@ impl Deserialize for TypeSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(TypeSection(read_entries_with_len(reader)?))
|
Ok(TypeSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,7 +404,7 @@ impl Deserialize for ImportSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(ImportSection(read_entries_with_len(reader)?))
|
Ok(ImportSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,7 +449,7 @@ impl Deserialize for FunctionSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(FunctionSection(read_entries_with_len(reader)?))
|
Ok(FunctionSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,7 +494,7 @@ impl Deserialize for TableSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(TableSection(read_entries_with_len(reader)?))
|
Ok(TableSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,7 +539,7 @@ impl Deserialize for MemorySection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(MemorySection(read_entries_with_len(reader)?))
|
Ok(MemorySection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,7 +584,7 @@ impl Deserialize for GlobalSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(GlobalSection(read_entries_with_len(reader)?))
|
Ok(GlobalSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +629,7 @@ impl Deserialize for ExportSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(ExportSection(read_entries_with_len(reader)?))
|
Ok(ExportSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -688,7 +674,7 @@ impl Deserialize for CodeSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(CodeSection(read_entries_with_len(reader)?))
|
Ok(CodeSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -733,7 +719,7 @@ impl Deserialize for ElementSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(ElementSection(read_entries_with_len(reader)?))
|
Ok(ElementSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,7 +764,7 @@ impl Deserialize for DataSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
Ok(DataSection(read_entries_with_len(reader)?))
|
Ok(DataSection(read_entries(reader)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user