summaryrefslogtreecommitdiff
path: root/crates/cli/src/cmd/run.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/cli/src/cmd/run.rs')
-rw-r--r--crates/cli/src/cmd/run.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/crates/cli/src/cmd/run.rs b/crates/cli/src/cmd/run.rs
index b2f5e03..06f29f1 100644
--- a/crates/cli/src/cmd/run.rs
+++ b/crates/cli/src/cmd/run.rs
@@ -1,4 +1,4 @@
-use eyre::{Result, bail};
+use eyre::Result;
use tinywasm::types::ExportType;
use tinywasm::{ModuleInstance, Store};
@@ -34,13 +34,17 @@ pub fn run(args: RunArgs) -> Result<()> {
Ok(())
}
None => {
- if instance.start_func(&store)?.is_none() {
- bail!(
- "module has no start function or `_start` export; use `tinywasm inspect {module_path}` or `tinywasm run --invoke <export> {module_path}`"
- )
+ if instance.start_func(&store)?.is_some() {
+ let _ = instance.start(&mut store)?;
+ return Ok(());
}
- let _ = instance.start(&mut store)?;
+ let start = instance.func_untyped(&store, "_start").map_err(|_| {
+ eyre::eyre!(
+ "module has no start function or `_start` export. Use `tinywasm inspect {module_path}` or `tinywasm run --invoke <export> {module_path}`"
+ )
+ })?;
+ start.call(&mut store, &[])?;
Ok(())
}
}