| ;;; TOOL: run-interp |
| ;;; ARGS*: --enable-exceptions |
| (module |
| (tag $e1) |
| (tag $e2) |
| (func (export "try-delegate") (result i32) |
| (try $l (result i32) |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate $l)) |
| (i32.const 0)) |
| (catch $e1 |
| (i32.const 1)))) |
| (func (export "try-delegate-2") (result i32) |
| (try $l (result i32) |
| (do |
| (try |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate $l))) |
| (catch_all)) |
| (i32.const 0)) |
| (catch $e1 |
| (i32.const 1)))) |
| (func (export "try-delegate-uncaught") (result i32) |
| (try $l (result i32) |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate $l)) |
| (i32.const 0)) |
| (catch $e2 |
| (i32.const 0)))) |
| (func (export "try-delegate-to-caller") (result i32) |
| (try (result i32) |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate 1)) |
| (i32.const 0)) |
| (catch $e1 |
| (i32.const 1)))) |
| (func (export "try-delegate-to-delegate") (result i32) |
| (try $l1 (result i32) |
| (do |
| (try $l2 |
| (do |
| (try |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate $l2))) |
| (catch_all))) |
| (delegate $l1)) |
| (i32.const 0)) |
| (catch $e1 |
| (i32.const 1)))) |
| (func (export "try-delegate-to-block") (result i32) |
| (try (result i32) |
| (do |
| (block $l |
| (try |
| (do |
| (try |
| (do (throw $e1)) |
| (delegate $l))) |
| (catch_all))) |
| (i32.const 0)) |
| (catch $e1 |
| (i32.const 1)))) |
| ) |
| (;; STDOUT ;;; |
| try-delegate() => i32:1 |
| try-delegate-2() => i32:1 |
| try-delegate-uncaught() => error: uncaught exception |
| try-delegate-to-caller() => error: uncaught exception |
| try-delegate-to-delegate() => i32:1 |
| try-delegate-to-block() => i32:1 |
| ;;; STDOUT ;;) |