mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-08 13:48:26 +00:00
Merge branch 'master' into feature/host-env-prototype
This commit is contained in:
59
lib/c-api/src/wasm_c_api/externals/function.rs
vendored
59
lib/c-api/src/wasm_c_api/externals/function.rs
vendored
@@ -116,42 +116,41 @@ pub unsafe extern "C" fn wasm_func_new_with_env(
|
||||
}
|
||||
}
|
||||
|
||||
let inner_callback =
|
||||
move |env: &mut WrapperEnv, args: &[Val]| -> Result<Vec<Val>, RuntimeError> {
|
||||
let processed_args: wasm_val_vec_t = args
|
||||
.into_iter()
|
||||
.map(TryInto::try_into)
|
||||
.collect::<Result<Vec<wasm_val_t>, _>>()
|
||||
.expect("Argument conversion failed")
|
||||
.into();
|
||||
|
||||
let mut results: wasm_val_vec_t = vec![
|
||||
wasm_val_t {
|
||||
kind: wasm_valkind_enum::WASM_I64 as _,
|
||||
of: wasm_val_inner { int64_t: 0 },
|
||||
};
|
||||
num_rets
|
||||
]
|
||||
let inner_callback = move |env: &WrapperEnv, args: &[Val]| -> Result<Vec<Val>, RuntimeError> {
|
||||
let processed_args: wasm_val_vec_t = args
|
||||
.into_iter()
|
||||
.map(TryInto::try_into)
|
||||
.collect::<Result<Vec<wasm_val_t>, _>>()
|
||||
.expect("Argument conversion failed")
|
||||
.into();
|
||||
|
||||
let trap = callback(env.env, &processed_args, &mut results);
|
||||
let mut results: wasm_val_vec_t = vec![
|
||||
wasm_val_t {
|
||||
kind: wasm_valkind_enum::WASM_I64 as _,
|
||||
of: wasm_val_inner { int64_t: 0 },
|
||||
};
|
||||
num_rets
|
||||
]
|
||||
.into();
|
||||
|
||||
if !trap.is_null() {
|
||||
let trap: Box<wasm_trap_t> = Box::from_raw(trap);
|
||||
let trap = callback(env.env, &processed_args, &mut results);
|
||||
|
||||
return Err(trap.inner);
|
||||
}
|
||||
if !trap.is_null() {
|
||||
let trap: Box<wasm_trap_t> = Box::from_raw(trap);
|
||||
|
||||
let processed_results = results
|
||||
.into_slice()
|
||||
.expect("Failed to convert `results` into a slice")
|
||||
.into_iter()
|
||||
.map(TryInto::try_into)
|
||||
.collect::<Result<Vec<Val>, _>>()
|
||||
.expect("Result conversion failed");
|
||||
return Err(trap.inner);
|
||||
}
|
||||
|
||||
Ok(processed_results)
|
||||
};
|
||||
let processed_results = results
|
||||
.into_slice()
|
||||
.expect("Failed to convert `results` into a slice")
|
||||
.into_iter()
|
||||
.map(TryInto::try_into)
|
||||
.collect::<Result<Vec<Val>, _>>()
|
||||
.expect("Result conversion failed");
|
||||
|
||||
Ok(processed_results)
|
||||
};
|
||||
|
||||
let function = Function::new_with_env(
|
||||
&store.inner,
|
||||
|
||||
Reference in New Issue
Block a user