diff options
author | Heejin Ahn <aheejin@gmail.com> | 2021-06-10 23:44:57 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-10 23:44:57 -0700 |
commit | ca263c00ec8ff3b7c51d066b273eeee50180091b (patch) | |
tree | 6ee8fa964b5ea8a1dc30cdc1b4e720b6d92d2056 /src/wasm/wasm-binary.cpp | |
parent | 83ae39af1f8ffe67856b16f7ee13de066169b48f (diff) | |
download | binaryen-ca263c00ec8ff3b7c51d066b273eeee50180091b.tar.gz binaryen-ca263c00ec8ff3b7c51d066b273eeee50180091b.tar.bz2 binaryen-ca263c00ec8ff3b7c51d066b273eeee50180091b.zip |
[EH] Allow catch/delegate-less trys (#3924)
This removes the restriction that `try` should have at least one
`catch`/`catch_all`/`delegate`. See WebAssembly/exception-handling#157.
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 84834352b..db253fa6e 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -6080,10 +6080,12 @@ void WasmBinaryBuilder::visitTryOrTryInBlock(Expression*& out) { // blocks instead. curr->type = getType(); curr->body = getBlockOrSingleton(curr->type); - if (lastSeparator != BinaryConsts::Catch && - lastSeparator != BinaryConsts::CatchAll && - lastSeparator != BinaryConsts::Delegate) { - throwError("No catch instruction within a try scope"); + + // try without catch or delegate + if (lastSeparator == BinaryConsts::End) { + curr->finalize(); + out = curr; + return; } Builder builder(wasm); @@ -6200,7 +6202,7 @@ void WasmBinaryBuilder::visitTryOrTryInBlock(Expression*& out) { // (catch $e // (block ;; Now this can be deleted when writing binary // ... - // (br $label0) + // (br $label) // ) // ) // ) |