#![forbid(unsafe_code)]
#![warn(clippy::dbg_macro)]
extern crate wain_ast;
pub mod trap;
mod cast;
mod globals;
mod import;
mod memory;
mod runtime;
mod stack;
mod table;
mod value;
pub use import::{check_func_signature, DefaultImporter, ImportInvalidError, ImportInvokeError, Importer};
pub use memory::Memory;
pub use runtime::Runtime;
pub use stack::Stack;
pub use value::Value;
use std::io;
use trap::Result;
use wain_ast::Module;
pub fn execute(module: &Module<'_>) -> Result<()> {
let stdin = io::stdin();
let stdout = io::stdout();
let importer = DefaultImporter::with_stdio(stdin.lock(), stdout.lock());
let mut runtime = Runtime::instantiate(module, importer)?;
if runtime.module().entrypoint.is_none() {
runtime.invoke("_start", &[])?;
}
Ok(())
}