Source code

Revision control

Copy as Markdown

Other Tools

// Simple test with return_call.
var ins = wasmEvalText(`(module
(tag $exn)
(func $f0 (result i32)
throw $exn
)
(func $f1 (result i32)
try
return_call $f0
catch $exn
i32.const 3
return
end
i32.const 4
)
(func (export "main") (result i32)
call $f1
)
)`);
assertErrorMessage(() => ins.exports.main(), WebAssembly.Exception, /.*/);
// Test if return stub, created by introducing the slow path,
// not interfering with exception propagation.
var ins0 = wasmEvalText(`(module
(tag $exn)
(func $f0 (result i32)
throw $exn
)
(func (export "f") (result i32)
call $f0
)
(export "t" (tag $exn))
)`);
var ins = wasmEvalText(`(module
(import "" "t" (tag $exn))
(import "" "f" (func $f0 (result i32)))
(func $f1 (result i32)
try
return_call $f0
catch $exn
i32.const 3
return
end
i32.const 4
)
(func (export "main") (result i32)
call $f1
)
)`, {"":ins0.exports,});
assertErrorMessage(() => ins.exports.main(), WebAssembly.Exception, /.*/);