1751: feat(c-api) Correctly implement “trap” in `wasm_func_new*` r=Hywan a=Hywan

The implementation of “trap” in `wasm_func_new` was “incorrect”. It's
more idiomatic to return a `RuntimeError` than raising it in this
case, so that we don't duplicate locations where runtime errors are
raised.

The implementation of “trap” in `wasm_func_new_with_env` was
missing. This patch implements a similar strategy than the sibling
function.

Fixes https://github.com/wasmerio/wasmer/issues/1744.

Co-authored-by: Ivan Enderlin <ivan@mnt.io>
This commit is contained in:
bors[bot]
2020-10-26 13:52:18 +00:00
committed by GitHub
2 changed files with 10 additions and 3 deletions

View File

@ -60,7 +60,8 @@ pub unsafe extern "C" fn wasm_func_new(
if !trap.is_null() {
let trap: Box<wasm_trap_t> = Box::from_raw(trap);
RuntimeError::raise(Box::new(trap.inner));
return Err(trap.inner);
}
let processed_results = results
@ -110,8 +111,13 @@ pub unsafe extern "C" fn wasm_func_new_with_env(
]
.into();
let _traps = callback(*env, &processed_args, &mut results);
// TODO: do something with `traps`
let trap = callback(*env, &processed_args, &mut results);
if !trap.is_null() {
let trap: Box<wasm_trap_t> = Box::from_raw(trap);
return Err(trap.inner);
}
let processed_results = results
.into_slice()