Skip to content

Commit

Permalink
Merge #1751
Browse files Browse the repository at this point in the history
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 #1744.

Co-authored-by: Ivan Enderlin <[email protected]>
  • Loading branch information
bors[bot] and Hywan authored Oct 26, 2020
2 parents 7eddb46 + 184e3f4 commit c6978ea
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
- [#1710](https://github.com/wasmerio/wasmer/pull/1710) Memory for function call trampolines is now owned by the Artifact.
### Added

- [#1751](https://github.com/wasmerio/wasmer/pull/1751) Implement `wasm_trap_t` inside a function declared with `wasm_func_new_with_env` in the Wasm C API.
- [#1741](https://github.com/wasmerio/wasmer/pull/1741) Implement `wasm_memory_type` in the Wasm C API.
- [#1736](https://github.com/wasmerio/wasmer/pull/1736) Implement `wasm_global_type` in the Wasm C API.
- [#1699](https://github.com/wasmerio/wasmer/pull/1699) Update `wasm.h` to its latest version.
Expand Down
12 changes: 9 additions & 3 deletions lib/c-api/src/wasm_c_api/externals/function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit c6978ea

Please sign in to comment.