From 1617d7a24fc454130215336b986c0607bec374de Mon Sep 17 00:00:00 2001 From: Henry Gressmann Date: Tue, 23 Jan 2024 13:56:31 +0100 Subject: core: attach types to functions Signed-off-by: Henry Gressmann --- crates/parser/src/lib.rs | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'crates/parser/src/lib.rs') diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs index 0618683..ae6cc4d 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs @@ -20,7 +20,7 @@ mod log { mod conversion; mod error; mod module; -use alloc::vec::Vec; +use alloc::{string::ToString, vec::Vec}; pub use error::*; use module::ModuleReader; use tinywasm_types::WasmFunction; @@ -103,15 +103,26 @@ impl TryFrom for TinyWasmModule { return Err(ParseError::EndNotReached); } - let func_types = reader.func_addrs; + let code_type_addrs = reader.code_type_addrs; + let local_function_count = reader.code.len(); + + if code_type_addrs.len() != local_function_count { + return Err(ParseError::Other("Code and code type address count mismatch".to_string())); + } + let funcs = reader .code .into_iter() - .zip(func_types) - .map(|(f, ty)| WasmFunction { - instructions: f.body, - locals: f.locals, - ty_addr: ty, + .zip(code_type_addrs) + .map(|(f, ty_idx)| { + ( + ty_idx, + WasmFunction { + instructions: f.body, + locals: f.locals, + ty: reader.func_types.get(ty_idx as usize).unwrap().clone(), + }, + ) }) .collect::>(); @@ -119,17 +130,17 @@ impl TryFrom for TinyWasmModule { let table_types = reader.table_types; Ok(TinyWasmModule { - version: reader.version, - start_func: reader.start_func, - func_types: reader.func_types.into_boxed_slice(), funcs: funcs.into_boxed_slice(), - exports: reader.exports.into_boxed_slice(), + func_types: reader.func_types.into_boxed_slice(), globals: globals.into_boxed_slice(), table_types: table_types.into_boxed_slice(), - memory_types: reader.memory_types.into_boxed_slice(), imports: reader.imports.into_boxed_slice(), + version: reader.version, + start_func: reader.start_func, data: reader.data.into_boxed_slice(), + exports: reader.exports.into_boxed_slice(), elements: reader.elements.into_boxed_slice(), + memory_types: reader.memory_types.into_boxed_slice(), }) } } -- cgit v1.3.1