From be40285a6743a8b84c6ca1eedd798ef24119217b Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 22 Jan 2019 12:58:29 +0300 Subject: [PATCH] func and tests --- src/graph.rs | 30 ++++++++++++++++++++++++++++++ src/ref_list.rs | 4 ++++ 2 files changed, 34 insertions(+) diff --git a/src/graph.rs b/src/graph.rs index 4a78ae6..3dd74a9 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -116,6 +116,15 @@ impl Module { }; } }, + elements::Section::Function(function_section) => { + for f in function_section.entries() { + res.funcs.push(Func { + type_ref: res.types.get(f.type_ref() as usize).expect("validated; qed").clone(), + // code will be populated later + origin: ImportedOrDeclared::Declared(Vec::new()), + }); + }; + }, _ => continue, } } @@ -125,7 +134,28 @@ impl Module { } +fn parse(wasm: &[u8]) -> Module { + Module::from_elements(&::parity_wasm::deserialize_buffer(wasm).expect("failed to parse wasm")) +} + #[cfg(test)] mod tests { + extern crate wabt; + use parity_wasm; + + #[test] + fn smoky() { + let wasm = wabt::wat2wasm(r#" + (module + (type (func)) + (func (type 0)) + ) + "#).expect("Failed to read fixture"); + + let f = super::parse(&wasm[..]); + + assert_eq!(f.types.len(), 1); + assert_eq!(f.funcs.len(), 1); + } } \ No newline at end of file diff --git a/src/ref_list.rs b/src/ref_list.rs index c349393..87497e0 100644 --- a/src/ref_list.rs +++ b/src/ref_list.rs @@ -144,6 +144,10 @@ impl RefList { res } + + pub fn len(&self) -> usize { + self.items.len() + } } #[must_use]