blob: f1c9f144b9f54f15b44d7bb6ea0a4fc627c04ecc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// A diagram depicting the control flow graph of the function g below can be
// found in "js/src/wasm/WasmIonCompile.cpp". If you make any changes to this
// test file be sure to adjust the SMDOC documentation there as well.
let g = wasmEvalText(
`(module
(tag $exn (param f64))
(func $f)
(func (export "g") (param $arg i32) (result f64)
(local.get $arg)
(try (param i32) (result f64)
(do
(if (result f64)
(then
(f64.const 3))
(else
(throw $exn (f64.const 6))))
(call $f)
(f64.sub (f64.const 2))) ;; If $arg is 0 we end here, subtracting 3.
;; If $arg is not 0 then the else-block throws $exn, caught below.
(catch $exn
(f64.add (f64.const 4))) ;; Adds 4 to the value in the $exn (6).
(catch_all ;; This shouldn't occur.
(f64.const 5)))))`
).exports.g;
assertEq(g(0), 10);
assertEq(g(1), 1);
|