Added support for native calls to dynamic functions

This commit is contained in:
Syrus
2020-06-12 20:50:24 -07:00
parent 21389f34ce
commit cd1138d520
10 changed files with 129 additions and 32 deletions

View File

@@ -39,3 +39,32 @@ fn native_function_works_for_wasm() -> Result<()> {
assert_eq!(result, 20);
Ok(())
}
fn dynamic_raw_call_no_env() -> anyhow::Result<()> {
let store = get_store();
let reverse_duplicate = wasmer::Function::new_dynamic(
&store,
&wasmer::FunctionType::new(
vec![
wasmer::ValType::I32,
wasmer::ValType::I64,
wasmer::ValType::F32,
wasmer::ValType::F64,
],
vec![wasmer::ValType::F64],
),
|values| {
Ok(vec![
Value::F64(values[3].unwrap_f64() * 2.0),
Value::F32(values[2].unwrap_f32() * 2.0),
Value::I64(values[2].unwrap_i64() * 2.0),
Value::I32(values[2].unwrap_i32() * 2.0),
])
},
);
let reverse_duplicate_native: NativeFunc<(i32, i64, f32, f64), (f64, f32, i64, i32)> =
reverse_duplicate.native().unwrap();
let result = reverse_duplicate_native.call(1, 3, 5.0, 7.0)?;
assert_eq!(result, (14.0, 10.0, 6, 2));
Ok(())
}