From d91678d58ba9672a54faec266d4f90da6bed932a Mon Sep 17 00:00:00 2001 From: Henry Gressmann Date: Thu, 30 Nov 2023 15:47:14 +0100 Subject: feat: add ModuleInstance.get_func Signed-off-by: Henry Gressmann --- crates/cli/bin.rs | 5 ++++- crates/tinywasm/src/module/mod.rs | 19 ++++++++++++++++++- crates/tinywasm/src/runtime/types.rs | 1 - 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/crates/cli/bin.rs b/crates/cli/bin.rs index 7cc0703..b06c286 100644 --- a/crates/cli/bin.rs +++ b/crates/cli/bin.rs @@ -70,7 +70,10 @@ fn main() -> Result<()> { fn run(wasm: &[u8]) -> Result<()> { let module = tinywasm::Module::try_new(wasm)?; let mut store = tinywasm::Store::default(); - let _instance = tinywasm::ModuleInstance::new(&mut store, &module)?; + let instance = tinywasm::ModuleInstance::new(&mut store, &module)?; + + let func = instance.get_func("add").unwrap(); + println!("func: {:?}", func); Ok(()) } diff --git a/crates/tinywasm/src/module/mod.rs b/crates/tinywasm/src/module/mod.rs index a3a8e44..4af1a9a 100644 --- a/crates/tinywasm/src/module/mod.rs +++ b/crates/tinywasm/src/module/mod.rs @@ -1,7 +1,10 @@ use alloc::vec::Vec; use wasmparser::{Export, FuncType, Validator}; -use crate::{runtime::FuncAddr, Error, Result, Store}; +use crate::{ + runtime::{FuncAddr, ModuleFunc}, + Error, Result, Store, +}; use self::reader::ModuleReader; @@ -33,6 +36,20 @@ impl<'m, 'data> ModuleInstance<'m, 'data> where 'm: 'data, { + /// Get an exported function by name + pub fn get_func(&self, name: &str) -> Option { + let export = self + .exports + .iter() + .find(|e| e.name == name && e.kind == wasmparser::ExternalKind::Func)?; + let func_addr = self.func_addrs.get(export.index as usize)?; + + Some(ModuleFunc { + code: *func_addr, + ty: self.types.get(*func_addr as usize)?.clone(), + }) + } + pub fn new(store: &'data mut Store<'data>, module: &'m Module<'data>) -> Result { let types = module .reader diff --git a/crates/tinywasm/src/runtime/types.rs b/crates/tinywasm/src/runtime/types.rs index 511eac1..f96c406 100644 --- a/crates/tinywasm/src/runtime/types.rs +++ b/crates/tinywasm/src/runtime/types.rs @@ -31,7 +31,6 @@ pub struct HostFunc { #[derive(Debug)] pub struct ModuleFunc { pub ty: FuncType, - pub module: Addr, pub code: FuncAddr, } pub struct Func<'a> { -- cgit v1.3.1