Trap::I32Exit is a better name

This commit is contained in:
Pat Hickey
2021-01-06 13:25:37 -08:00
parent 1dab7c8f94
commit cd3adb1abd
4 changed files with 12 additions and 5 deletions

2
Cargo.lock generated
View File

@@ -2908,7 +2908,7 @@ dependencies = [
[[package]] [[package]]
name = "witx" name = "witx"
version = "0.8.7" version = "0.8.8"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"diff", "diff",

View File

@@ -717,7 +717,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx {
fn proc_exit(&self, status: types::Exitcode) -> wiggle::Trap { fn proc_exit(&self, status: types::Exitcode) -> wiggle::Trap {
// Check that the status is within WASI's range. // Check that the status is within WASI's range.
if status < 126 { if status < 126 {
wiggle::Trap::I32(status as i32) wiggle::Trap::I32Exit(status as i32)
} else { } else {
wiggle::Trap::String("exit with invalid exit status outside of [0..126)".to_owned()) wiggle::Trap::String("exit with invalid exit status outside of [0..126)".to_owned())
} }

View File

@@ -929,8 +929,15 @@ impl Pointee for str {
} }
} }
#[derive(Debug, Clone)] /// A runtime-independent way for Wiggle to terminate WebAssembly execution.
/// Functions that are marked `(@witx noreturn)` will always return a Trap.
/// Other functions that want to Trap can do so via their `UserErrorConversion`
/// trait, which transforms the user's own error type into a `Result<abierror, Trap>`.
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Trap { pub enum Trap {
I32(i32), /// A Trap which indicates an i32 (posix-style) exit code. Runtimes may have a
/// special way of dealing with this for WASI embeddings and otherwise.
I32Exit(i32),
/// Any other Trap is just an unstructured String, for reporting and debugging.
String(String), String(String),
} }

View File

@@ -201,7 +201,7 @@ fn generate_func(
match result { match result {
Ok(r) => Ok(r.into()), Ok(r) => Ok(r.into()),
Err(wasmtime_wiggle::Trap::String(err)) => Err(wasmtime::Trap::new(err)), Err(wasmtime_wiggle::Trap::String(err)) => Err(wasmtime::Trap::new(err)),
Err(wasmtime_wiggle::Trap::I32(err)) => Err(wasmtime::Trap::i32_exit(err)), Err(wasmtime_wiggle::Trap::I32Exit(err)) => Err(wasmtime::Trap::i32_exit(err)),
} }
} }
} }