c-api: Fix wasmtime_func_call_unchecked to communicate all errors (#5262)
Change the return value of this function to a `wasmtime_error_t*` instead of the prior `wasm_trap_t*`. This is a leftover from #5149. Closes #5257
This commit is contained in:
@@ -241,10 +241,11 @@ WASM_API_EXTERN wasmtime_error_t *wasmtime_func_call(
|
|||||||
* faster than that function, but the tradeoff is that embeddings must uphold
|
* faster than that function, but the tradeoff is that embeddings must uphold
|
||||||
* more invariants rather than relying on Wasmtime to check them for you.
|
* more invariants rather than relying on Wasmtime to check them for you.
|
||||||
*/
|
*/
|
||||||
WASM_API_EXTERN wasm_trap_t *wasmtime_func_call_unchecked(
|
WASM_API_EXTERN wasmtime_error_t *wasmtime_func_call_unchecked(
|
||||||
wasmtime_context_t *store,
|
wasmtime_context_t *store,
|
||||||
const wasmtime_func_t *func,
|
const wasmtime_func_t *func,
|
||||||
wasmtime_val_raw_t *args_and_results
|
wasmtime_val_raw_t *args_and_results,
|
||||||
|
wasm_trap_t **trap
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -351,14 +351,7 @@ pub unsafe extern "C" fn wasmtime_func_call(
|
|||||||
store.data_mut().wasm_val_storage = params;
|
store.data_mut().wasm_val_storage = params;
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
Ok(Err(trap)) => {
|
Ok(Err(trap)) => store_err(trap, trap_ret),
|
||||||
if trap.is::<Trap>() {
|
|
||||||
*trap_ret = Box::into_raw(Box::new(wasm_trap_t::new(trap)));
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(Box::new(wasmtime_error_t::from(trap)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(panic) => {
|
Err(panic) => {
|
||||||
let err = error_from_panic(panic);
|
let err = error_from_panic(panic);
|
||||||
*trap_ret = Box::into_raw(Box::new(wasm_trap_t::new(err)));
|
*trap_ret = Box::into_raw(Box::new(wasm_trap_t::new(err)));
|
||||||
@@ -372,10 +365,20 @@ pub unsafe extern "C" fn wasmtime_func_call_unchecked(
|
|||||||
store: CStoreContextMut<'_>,
|
store: CStoreContextMut<'_>,
|
||||||
func: &Func,
|
func: &Func,
|
||||||
args_and_results: *mut ValRaw,
|
args_and_results: *mut ValRaw,
|
||||||
) -> *mut wasm_trap_t {
|
trap_ret: &mut *mut wasm_trap_t,
|
||||||
|
) -> Option<Box<wasmtime_error_t>> {
|
||||||
match func.call_unchecked(store, args_and_results) {
|
match func.call_unchecked(store, args_and_results) {
|
||||||
Ok(()) => ptr::null_mut(),
|
Ok(()) => None,
|
||||||
Err(trap) => Box::into_raw(Box::new(wasm_trap_t::new(trap))),
|
Err(trap) => store_err(trap, trap_ret),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn store_err(err: Error, trap_ret: &mut *mut wasm_trap_t) -> Option<Box<wasmtime_error_t>> {
|
||||||
|
if err.is::<Trap>() {
|
||||||
|
*trap_ret = Box::into_raw(Box::new(wasm_trap_t::new(err)));
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Box::new(wasmtime_error_t::from(err)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user