mirror of
https://github.com/fluencelabs/parity-wasm
synced 2025-06-22 03:02:08 +00:00
working sections parse
This commit is contained in:
@ -34,7 +34,8 @@ impl Deserialize for Unparsed {
|
|||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
|
||||||
let len = VarUint32::deserialize(reader)?.into();
|
let len = VarUint32::deserialize(reader)?.into();
|
||||||
let vec = vec![0u8; len];
|
let mut vec = vec![0u8; len];
|
||||||
|
reader.read_exact(&mut vec[..])?;
|
||||||
Ok(Unparsed(vec))
|
Ok(Unparsed(vec))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,10 @@ pub struct Module {
|
|||||||
|
|
||||||
impl Module {
|
impl Module {
|
||||||
pub fn version(&self) -> u32 { self.version }
|
pub fn version(&self) -> u32 { self.version }
|
||||||
|
|
||||||
|
pub fn sections(&self) -> &[Section] {
|
||||||
|
&self.sections
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserialize for Module {
|
impl Deserialize for Module {
|
||||||
@ -19,6 +23,7 @@ impl Deserialize for Module {
|
|||||||
let mut sections = Vec::new();
|
let mut sections = Vec::new();
|
||||||
|
|
||||||
let magic = Uint32::deserialize(reader)?;
|
let magic = Uint32::deserialize(reader)?;
|
||||||
|
|
||||||
let version = Uint32::deserialize(reader)?;
|
let version = Uint32::deserialize(reader)?;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
@ -58,5 +63,6 @@ mod integration_tests {
|
|||||||
let module = Module::deserialize(&mut reader).expect("Should be deserialized");
|
let module = Module::deserialize(&mut reader).expect("Should be deserialized");
|
||||||
|
|
||||||
assert_eq!(module.version(), 1);
|
assert_eq!(module.version(), 1);
|
||||||
|
assert_eq!(module.sections().len(), 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,9 +10,12 @@ impl Deserialize for Section {
|
|||||||
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> {
|
||||||
let id = VarUint7::deserialize(reader)?;
|
let id = match VarUint7::deserialize(reader) {
|
||||||
|
// todo: be more selective detecting no more section
|
||||||
|
Err(_) => { return Err(Error::UnexpectedEof); },
|
||||||
|
Ok(id) => id,
|
||||||
|
};
|
||||||
let unparsed = Unparsed::deserialize(reader)?;
|
let unparsed = Unparsed::deserialize(reader)?;
|
||||||
|
|
||||||
Ok(Section {
|
Ok(Section {
|
||||||
id: id.0,
|
id: id.0,
|
||||||
unparsed: unparsed,
|
unparsed: unparsed,
|
||||||
|
Reference in New Issue
Block a user