diff --git a/crates/api/examples/multi.rs b/crates/api/examples/multi.rs index 9506c18ebe..e3d35c296e 100644 --- a/crates/api/examples/multi.rs +++ b/crates/api/examples/multi.rs @@ -51,19 +51,22 @@ fn main() -> Result<()> { .context("Error instantiating module!")?, ); - // Extract export. + // Extract exports. println!("Extracting export..."); let exports = Ref::map(instance.borrow(), |instance| instance.exports()); ensure!(!exports.is_empty(), "Error accessing exports!"); - let run_func = exports[0].func().context("Error accessing exports!")?; + let g = exports[0].func().context("> Error accessing export $g!")?; + let round_trip_many = exports[1] + .func() + .context("> Error accessing export $round_trip_many")?; - // Call. - println!("Calling export..."); + // Call `$g`. + println!("Calling export \"g\"..."); let args = vec![Val::I32(1), Val::I64(3)]; - let results = run_func + let results = g .borrow() .call(&args) - .map_err(|e| format_err!("> Error calling function: {:?}", e))?; + .map_err(|e| format_err!("> Error calling g! {:?}", e))?; println!("Printing result..."); println!("> {} {}", results[0].i64(), results[1].i32()); @@ -71,6 +74,38 @@ fn main() -> Result<()> { debug_assert_eq!(results[0].i64(), 4); debug_assert_eq!(results[1].i32(), 2); + // Call `$round_trip_many`. + println!("Calling export \"round_trip_many\"..."); + let args = vec![ + Val::I64(0), + Val::I64(1), + Val::I64(2), + Val::I64(3), + Val::I64(4), + Val::I64(5), + Val::I64(6), + Val::I64(7), + Val::I64(8), + Val::I64(9), + ]; + let results = round_trip_many + .borrow() + .call(&args) + .map_err(|e| format_err!("> Error calling round_trip_many! {:?}", e))?; + + println!("Printing result..."); + print!(">"); + for r in results.iter() { + print!(" {}", r.i64()); + } + println!(); + + debug_assert_eq!(results.len(), 10); + debug_assert!(args + .iter() + .zip(results.iter()) + .all(|(a, r)| a.i64() == r.i64())); + // Shut down. println!("Shutting down..."); drop(store); diff --git a/crates/api/examples/multi.wasm b/crates/api/examples/multi.wasm index 2b117daa86..9684f9fa1d 100644 Binary files a/crates/api/examples/multi.wasm and b/crates/api/examples/multi.wasm differ diff --git a/crates/api/examples/multi.wat b/crates/api/examples/multi.wat index f26a857e17..cacd95504a 100644 --- a/crates/api/examples/multi.wat +++ b/crates/api/examples/multi.wat @@ -4,4 +4,19 @@ (func $g (export "g") (param i32 i64) (result i64 i32) (call $f (local.get 0) (local.get 1)) ) + + (func $round_trip_many + (export "round_trip_many") + (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) + (result i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + local.get 4 + local.get 5 + local.get 6 + local.get 7 + local.get 8 + local.get 9) )