blob: 2b199ab5c549ce5419498299421fa9c649bba9b1 [file] [edit]
;;; TOOL: run-interp
;;; ARGS*: --enable-exceptions
(module
(tag $e1)
(tag $e2)
(tag $e3 (param i32))
(func (export "throw-uncaught")
(throw $e1))
(func (export "throw-uncaught-2")
(try
(do
(throw $e1))))
(func (export "try-catch") (result i32)
(try (result i32)
(do
(throw $e1))
(catch $e1
(i32.const 1))))
(func (export "try-catch-all") (result i32)
(try (result i32)
(do
(throw $e1))
(catch_all
(i32.const 1))))
(func (export "try-catch-all-2")
(try
(do
(i32.const 1)
(throw $e3))
(catch_all)))
(func (export "try-catch-payload") (result i32)
(try (result i32)
(do
(i32.const 42)
(throw $e3))
(catch $e3)))
(func (export "try-catch-multi") (result i32)
(try (result i32)
(do
(throw $e2))
(catch $e1
(i32.const 1))
(catch $e2
(i32.const 2))))
(func (export "try-catch-nested") (result i32)
(try (result i32)
(do
(try (result i32)
(do (throw $e2))
(catch $e1
(i32.const 1))))
(catch $e2
(i32.const 2))))
(func (export "try-catch-nested-2") (result i32)
(try (result i32)
(do
(try (result i32)
(do (throw $e1))
(catch $e1
(i32.const 1))))
(catch $e1
(i32.const 2))))
(func (export "try-catch-nested-3") (result i32)
(try (result i32)
(do
(try (result i32)
(do
(try (result i32)
(do (throw $e2))
(catch $e1
(i32.const 1))))
(catch $e2
(i32.const 2))))
(catch_all
(i32.const 3))))
(func (export "try-catch-nested-4") (result i32)
(try (result i32)
(do
(try (result i32)
(do
(throw $e1))
(catch $e1
(try (do (throw $e2)))
(i32.const 0))
(catch $e2
(i32.const 0))))
(catch $e2
(i32.const 1))))
(func (export "try-catch-nested-5") (result i32)
(try (result i32)
(do
(try (result i32)
(do
(throw $e1))
(catch $e1
(try (do (throw $e2)))
(i32.const 0))
(catch_all
(i32.const 0))))
(catch $e2
(i32.const 1))))
(func (export "try-catch-uncaught") (result i32)
(try (result i32)
(do
(throw $e1))
(catch $e2
(i32.const 1))))
(func (export "try-catch-stack-size") (result i32)
(i32.const 1)
(try
(do
(i32.const 0)
(throw $e1))
(catch $e1))
;; here the value stack should have just 1
)
(func $helper
(try
(do
(i32.const 0)
(throw $e1))
(catch $e1)))
(func (export "try-catch-stack-size-2") (result i32)
(i32.const 1)
(call $helper)))
(;; STDOUT ;;;
throw-uncaught() => error: uncaught exception
throw-uncaught-2() => error: uncaught exception
try-catch() => i32:1
try-catch-all() => i32:1
try-catch-all-2() =>
try-catch-payload() => i32:42
try-catch-multi() => i32:2
try-catch-nested() => i32:2
try-catch-nested-2() => i32:1
try-catch-nested-3() => i32:2
try-catch-nested-4() => i32:1
try-catch-nested-5() => i32:1
try-catch-uncaught() => error: uncaught exception
try-catch-stack-size() => i32:1
try-catch-stack-size-2() => i32:1
;;; STDOUT ;;)