@@ -2,7 +2,6 @@ use crate::frame_info::{GlobalFrameInfo, FRAME_INFO};
22use crate :: FrameInfo ;
33use backtrace:: Backtrace ;
44use std:: fmt;
5- use std:: num:: NonZeroI32 ;
65use std:: sync:: Arc ;
76use wasmtime_environ:: ir:: TrapCode ;
87
@@ -19,15 +18,15 @@ pub enum TrapReason {
1918 /// An error message describing a trap.
2019 Message ( String ) ,
2120
22- /// A non-zero exit status describing an explicit program exit.
23- Exit ( NonZeroI32 ) ,
21+ /// An `i32` exit status describing an explicit program exit.
22+ I32Exit ( i32 ) ,
2423}
2524
2625impl fmt:: Display for TrapReason {
2726 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2827 match self {
2928 TrapReason :: Message ( s) => write ! ( f, "{}" , s) ,
30- TrapReason :: Exit ( status) => write ! ( f, "Exited with non-zero exit status {}" , status) ,
29+ TrapReason :: I32Exit ( status) => write ! ( f, "Exited with i32 exit status {}" , status) ,
3130 }
3231 }
3332}
@@ -54,9 +53,21 @@ impl Trap {
5453 Trap :: new_with_trace ( & info, None , message. into ( ) , Backtrace :: new_unresolved ( ) )
5554 }
5655
57- pub ( crate ) fn from_jit ( jit : wasmtime_runtime:: Trap ) -> Self {
56+ /// Creates a new `Trap` representing an explicit program exit with a classic `i32`
57+ /// exit status value.
58+ pub fn i32_exit ( status : i32 ) -> Self {
59+ Trap {
60+ inner : Arc :: new ( TrapInner {
61+ reason : TrapReason :: I32Exit ( status) ,
62+ wasm_trace : Vec :: new ( ) ,
63+ native_trace : Backtrace :: from ( Vec :: new ( ) ) ,
64+ } ) ,
65+ }
66+ }
67+
68+ pub ( crate ) fn from_runtime ( runtime_trap : wasmtime_runtime:: Trap ) -> Self {
5869 let info = FRAME_INFO . read ( ) . unwrap ( ) ;
59- match jit {
70+ match runtime_trap {
6071 wasmtime_runtime:: Trap :: User ( error) => {
6172 // Since we're the only one using the wasmtime internals (in
6273 // theory) we should only see user errors which were originally
@@ -91,10 +102,6 @@ impl Trap {
91102 wasmtime_runtime:: Trap :: OOM { backtrace } => {
92103 Trap :: new_with_trace ( & info, None , "out of memory" . to_string ( ) , backtrace)
93104 }
94- wasmtime_runtime:: Trap :: Exit { status } => Trap :: new_exit ( status) ,
95- wasmtime_runtime:: Trap :: InvalidExitStatus { backtrace } => {
96- Trap :: new_with_trace ( & info, None , "invalid exit status" . to_string ( ) , backtrace)
97- }
98105 }
99106 }
100107
@@ -158,16 +165,6 @@ impl Trap {
158165 }
159166 }
160167
161- fn new_exit ( status : NonZeroI32 ) -> Self {
162- Trap {
163- inner : Arc :: new ( TrapInner {
164- reason : TrapReason :: Exit ( status) ,
165- wasm_trace : Vec :: new ( ) ,
166- native_trace : Backtrace :: from ( Vec :: new ( ) ) ,
167- } ) ,
168- }
169- }
170-
171168 /// Returns a reference the `message` stored in `Trap`.
172169 pub fn reason ( & self ) -> & TrapReason {
173170 & self . inner . reason
0 commit comments