summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2021-06-10 23:44:57 -0700
committerGitHub <noreply@github.com>2021-06-10 23:44:57 -0700
commitca263c00ec8ff3b7c51d066b273eeee50180091b (patch)
tree6ee8fa964b5ea8a1dc30cdc1b4e720b6d92d2056 /src/wasm/wasm-binary.cpp
parent83ae39af1f8ffe67856b16f7ee13de066169b48f (diff)
downloadbinaryen-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.cpp12
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)
// )
// )
// )