summaryrefslogtreecommitdiff
path: root/test/exception-handling.wast.fromBinary.noDebugInfo
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2019-08-13 00:29:26 +0900
committerGitHub <noreply@github.com>2019-08-13 00:29:26 +0900
commite2f49d8227f2b71e4dede5cf4074bb9f65e3d77f (patch)
tree30b132b02824839d1d7718ed32c6b90cc0828151 /test/exception-handling.wast.fromBinary.noDebugInfo
parent69ad1e8a8d2e1d395e30230433742f4f5668563b (diff)
downloadbinaryen-e2f49d8227f2b71e4dede5cf4074bb9f65e3d77f.tar.gz
binaryen-e2f49d8227f2b71e4dede5cf4074bb9f65e3d77f.tar.bz2
binaryen-e2f49d8227f2b71e4dede5cf4074bb9f65e3d77f.zip
Add basic exception handling support (#2282)
This adds basic support for exception handling instructions, according to the spec: https://github.com/WebAssembly/exception-handling/blob/master/proposals/Exceptions.md This PR includes support for: - Binary reading/writing - Wast reading/writing - Stack IR - Validation - binaryen.js + C API - Few IR routines: branch-utils, type-updating, etc - Few passes: just enough to make `wasm-opt -O` pass - Tests This PR does not include support for many optimization passes, fuzzer, or interpreter. They will be follow-up PRs. Try-catch construct is modeled in Binaryen IR in a similar manner to that of if-else: each of try body and catch body will contain a block, which can be omitted if there is only a single instruction. This block will not be emitted in wast or binary, as in if-else. As in if-else, `class Try` contains two expressions each for try body and catch body, and `catch` is not modeled as an instruction. `exnref` value pushed by `catch` is get by `pop` instruction. `br_on_exn` is special: it returns different types of values when taken and not taken. We make `exnref`, the type `br_on_exn` pushes if not taken, as `br_on_exn`'s type.
Diffstat (limited to 'test/exception-handling.wast.fromBinary.noDebugInfo')
-rw-r--r--test/exception-handling.wast.fromBinary.noDebugInfo38
1 files changed, 37 insertions, 1 deletions
diff --git a/test/exception-handling.wast.fromBinary.noDebugInfo b/test/exception-handling.wast.fromBinary.noDebugInfo
index 11555cd10..23ba7946c 100644
--- a/test/exception-handling.wast.fromBinary.noDebugInfo
+++ b/test/exception-handling.wast.fromBinary.noDebugInfo
@@ -1,8 +1,44 @@
(module
(type $0 (func (param exnref) (result exnref)))
- (memory $0 1 1)
+ (type $1 (func))
+ (type $2 (func (param i32)))
+ (event $event$0 (attr 0) (param i32))
(func $0 (; 0 ;) (type $0) (param $0 exnref) (result exnref)
(local.get $0)
)
+ (func $1 (; 1 ;) (type $1)
+ (local $0 exnref)
+ (try
+ (throw $event$0
+ (i32.const 0)
+ )
+ (catch
+ (local.set $0
+ (exnref.pop)
+ )
+ (drop
+ (block $label$3 (result i32)
+ (rethrow
+ (br_on_exn $label$3 $event$0
+ (local.get $0)
+ )
+ )
+ )
+ )
+ )
+ )
+ (block $label$4
+ (try
+ (br $label$4)
+ (catch
+ (drop
+ (exnref.pop)
+ )
+ (br $label$4)
+ )
+ )
+ )
+ (unreachable)
+ )
)