Previously extracting an exit code was only possibly on a `wasm_trap_t` which will never successfully have an exit code on it, so the exit code extractor is moved over to `wasmtime_error_t`. Additionally extracting a wasm trace from a `wasmtime_error_t` is added since traces happen on both traps and errors now.
74 lines
2.1 KiB
C
74 lines
2.1 KiB
C
/**
|
|
* \file wasmtime/error.h
|
|
*
|
|
* \brief Definition and accessors of #wasmtime_error_t
|
|
*/
|
|
|
|
#ifndef WASMTIME_ERROR_H
|
|
#define WASMTIME_ERROR_H
|
|
|
|
#include <wasm.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* \typedef wasmtime_error_t
|
|
* \brief Convenience alias for #wasmtime_error
|
|
*
|
|
* \struct wasmtime_error
|
|
* \brief Errors generated by Wasmtime.
|
|
* \headerfile wasmtime/error.h
|
|
*
|
|
* This opaque type represents an error that happened as part of one of the
|
|
* functions below. Errors primarily have an error message associated with them
|
|
* at this time, which you can acquire by calling #wasmtime_error_message.
|
|
*
|
|
* Errors are safe to share across threads and must be deleted with
|
|
* #wasmtime_error_delete.
|
|
*/
|
|
typedef struct wasmtime_error wasmtime_error_t;
|
|
|
|
/**
|
|
* \brief Deletes an error.
|
|
*/
|
|
WASM_API_EXTERN void wasmtime_error_delete(wasmtime_error_t *error);
|
|
|
|
/**
|
|
* \brief Returns the string description of this error.
|
|
*
|
|
* This will "render" the error to a string and then return the string
|
|
* representation of the error to the caller. The `message` argument should be
|
|
* uninitialized before this function is called and the caller is responsible
|
|
* for deallocating it with #wasm_byte_vec_delete afterwards.
|
|
*/
|
|
WASM_API_EXTERN void wasmtime_error_message(
|
|
const wasmtime_error_t *error,
|
|
wasm_name_t *message
|
|
);
|
|
|
|
/**
|
|
* \brief Attempts to extract a WASI-specific exit status from this error.
|
|
*
|
|
* Returns `true` if the error is a WASI "exit" trap and has a return status.
|
|
* If `true` is returned then the exit status is returned through the `status`
|
|
* pointer. If `false` is returned then this is not a wasi exit trap.
|
|
*/
|
|
WASM_API_EXTERN bool wasmtime_error_exit_status(const wasmtime_error_t*, int *status);
|
|
|
|
/**
|
|
* \brief Attempts to extract a WebAssembly trace from this error.
|
|
*
|
|
* This is similar to #wasm_trap_trace except that it takes a #wasmtime_error_t
|
|
* as input. The `out` argument will be filled in with the wasm trace, if
|
|
* present.
|
|
*/
|
|
WASM_API_EXTERN void wasmtime_error_wasm_trace(const wasmtime_error_t*, wasm_frame_vec_t *out);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // WASMTIME_ERROR_H
|