summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2023-12-12 18:50:44 -0800
committerGitHub <noreply@github.com>2023-12-12 18:50:44 -0800
commit8e9199274e4dbd93b1ca65d9c053c4610599e69f (patch)
tree48927ac72d6ada4ca61dc0bad9a0db3378746394 /test
parent28bea549061d88a8a7f7d05f3acf3bca175f0102 (diff)
downloadbinaryen-8e9199274e4dbd93b1ca65d9c053c4610599e69f.tar.gz
binaryen-8e9199274e4dbd93b1ca65d9c053c4610599e69f.tar.bz2
binaryen-8e9199274e4dbd93b1ca65d9c053c4610599e69f.zip
[Parser] Parse rethrow (#6155)
Like `delegate`, rethrow takes a `Try` label. Refactor the delegate handling so that `Try` can share its logic.
Diffstat (limited to 'test')
-rw-r--r--test/lit/wat-kitchen-sink.wast158
1 files changed, 157 insertions, 1 deletions
diff --git a/test/lit/wat-kitchen-sink.wast b/test/lit/wat-kitchen-sink.wast
index 2be098baf..c4bd48260 100644
--- a/test/lit/wat-kitchen-sink.wast
+++ b/test/lit/wat-kitchen-sink.wast
@@ -2024,6 +2024,162 @@
)
)
+ ;; CHECK: (func $rethrow (type $void)
+ ;; CHECK-NEXT: (block $label
+ ;; CHECK-NEXT: (try $__delegate__label
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (rethrow $__delegate__label)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow
+ try
+ catch $empty
+ rethrow 0
+ end
+ )
+
+ ;; CHECK: (func $rethrow-named (type $void)
+ ;; CHECK-NEXT: (block $l
+ ;; CHECK-NEXT: (try $__delegate__l
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (rethrow $__delegate__l)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow-named
+ try $l
+ catch $empty
+ rethrow $l
+ end
+ )
+
+ ;; CHECK: (func $rethrow-nested (type $void)
+ ;; CHECK-NEXT: (block $label
+ ;; CHECK-NEXT: (try $__delegate__label
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (try
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (rethrow $__delegate__label)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow-nested
+ try
+ catch $empty
+ block
+ try
+ catch $empty
+ rethrow 2
+ end
+ end
+ end
+ )
+
+ ;; CHECK: (func $rethrow-nested-named (type $void)
+ ;; CHECK-NEXT: (block $l
+ ;; CHECK-NEXT: (try $__delegate__l
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (try
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (rethrow $__delegate__l)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow-nested-named
+ try $l
+ catch $empty
+ block
+ try
+ catch $empty
+ rethrow $l
+ end
+ end
+ end
+ )
+
+ ;; CHECK: (func $rethrow-try-nested (type $void)
+ ;; CHECK-NEXT: (block $label
+ ;; CHECK-NEXT: (try $__delegate__label
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (try
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (rethrow $__delegate__label)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow-try-nested
+ try
+ catch $empty
+ block
+ try
+ ;; Same as before, but now the rethrow is in the inner try instead of the
+ ;; inner catch.
+ rethrow 2
+ end
+ end
+ end
+ )
+
+ ;; CHECK: (func $rethrow-try-nested-named (type $void)
+ ;; CHECK-NEXT: (block $l
+ ;; CHECK-NEXT: (try $__delegate__l
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch $empty
+ ;; CHECK-NEXT: (try
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (rethrow $__delegate__l)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $rethrow-try-nested-named
+ try $l
+ catch $empty
+ block
+ try
+ rethrow $l
+ end
+ end
+ end
+ )
+
;; CHECK: (func $label-siblings (type $void)
;; CHECK-NEXT: (block $l
;; CHECK-NEXT: (br $l)
@@ -2922,7 +3078,7 @@
(func $ref-func
ref.func $ref-func
drop
- ref.func 129
+ ref.func 135
drop
)