1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#![forbid(unsafe_code)]
extern crate wain_ast;
pub mod trap;
mod cast;
mod globals;
mod import;
mod machine;
mod memory;
mod stack;
mod table;
mod value;
pub use import::{
check_func_signature, DefaultImporter, ImportInvalidError, ImportInvokeError, Importer,
};
pub use machine::{Machine, Run};
pub use memory::Memory;
pub use stack::Stack;
pub use value::Value;
use std::io;
use trap::Result;
use wain_ast::Module;
pub fn execute(module: &Module<'_>) -> Result<Run> {
let stdin = io::stdin();
let stdout = io::stdout();
let importer = DefaultImporter::with_stdio(stdin.lock(), stdout.lock());
let mut machine = Machine::instantiate(module, importer)?;
machine.execute()
}