Add implementations for typed func errors to cranelift and llvm

This commit is contained in:
Lachlan Sneff
2019-04-09 15:53:01 -07:00
committed by Syrus
parent 7d09a2ee7e
commit cc656b26a9
9 changed files with 261 additions and 151 deletions

View File

@ -5,7 +5,10 @@ use wabt::wat2wasm;
static WAT: &'static str = r#"
(module
(type (;0;) (func (result i32)))
(import "env" "do_panic" (func $do_panic (type 0)))
(func $dbz (result i32)
call $do_panic
drop
i32.const 42
i32.const 0
i32.div_u
@ -33,6 +36,10 @@ fn foobar(ctx: &mut Ctx) -> i32 {
42
}
fn do_panic(ctx: &mut Ctx) -> Result<i32, String> {
Err("error".to_string())
}
fn main() -> Result<(), error::Error> {
let wasm = get_wasm();
@ -46,11 +53,15 @@ fn main() -> Result<(), error::Error> {
// };
println!("instantiating");
let instance = module.instantiate(&imports! {})?;
let instance = module.instantiate(&imports! {
"env" => {
"do_panic" => Func::new(do_panic),
},
})?;
let foo = instance.dyn_func("dbz")?;
let foo: Func<(), i32> = instance.func("dbz")?;
let result = foo.call(&[]);
let result = foo.call();
println!("result: {:?}", result);