diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index 5f80c2640f0..ceb6604d634 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -204,7 +204,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { // TODO: refactor this #[cfg(not(feature = "wasi"))] - let (_abi, import_object, _em_globals) = if wasmer_emscripten::is_emscripten_module(&module) { + let (abi, import_object, _em_globals) = if wasmer_emscripten::is_emscripten_module(&module) { let mut emscripten_globals = wasmer_emscripten::EmscriptenGlobals::new(&module); ( InstanceABI::Emscripten, @@ -220,7 +220,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { }; #[cfg(feature = "wasi")] - let (_abi, import_object) = if wasmer_wasi::is_wasi_module(&module) { + let (abi, import_object) = if wasmer_wasi::is_wasi_module(&module) { ( InstanceABI::WASI, wasmer_wasi::generate_import_object( @@ -249,6 +249,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { webassembly::run_instance( &module, &mut instance, + abi, options.path.to_str().unwrap(), options.args.iter().map(|arg| arg.as_str()).collect(), ) diff --git a/src/webassembly.rs b/src/webassembly.rs index 51f1e7a927d..01367795aed 100644 --- a/src/webassembly.rs +++ b/src/webassembly.rs @@ -7,7 +7,7 @@ use wasmer_runtime::{ use wasmer_runtime_core::backend::CompilerConfig; use wasmer_runtime_core::types::Value; -use wasmer_emscripten::{is_emscripten_module, run_emscripten_instance}; +use wasmer_emscripten::run_emscripten_instance; pub struct ResultObject { /// A webassembly::Module object representing the compiled WebAssembly module. @@ -93,18 +93,24 @@ pub fn compile_with_config( pub fn run_instance( module: &Module, instance: &mut Instance, + abi: InstanceABI, path: &str, args: Vec<&str>, ) -> CallResult<()> { - if is_emscripten_module(module) { - run_emscripten_instance(module, instance, path, args)?; - } else { - let args: Vec = args - .into_iter() - .map(|x| Value::I32(x.parse().unwrap())) - .collect(); - instance.call("main", &args)?; - }; - + match abi { + InstanceABI::Emscripten => { + run_emscripten_instance(module, instance, path, args)?; + } + InstanceABI::WASI => { + instance.call("_start", &[])?; + } + InstanceABI::None => { + let args: Vec = args + .into_iter() + .map(|x| Value::I32(x.parse().unwrap())) + .collect(); + instance.call("main", &args)?; + } + } Ok(()) }