/* Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// ./test/core/if.wast
// ./test/core/if.wast:3
let $0 = instantiate(`(module
;; Auxiliary definition
(memory 1)
(func $$dummy)
(func (export
"empty") (param i32)
(
if (local.get 0) (then))
(
if (local.get 0) (then) (
else))
(
if $$l (local.get 0) (then))
(
if $$l (local.get 0) (then) (
else))
)
(func (export
"singular") (param i32) (result i32)
(
if (local.get 0) (then (nop)))
(
if (local.get 0) (then (nop)) (
else (nop)))
(
if (result i32) (local.get 0) (then (i32.
const 7)) (
else (i32.
const 8)))
)
(func (export
"multi") (param i32) (result i32 i32)
(
if (local.get 0) (then (call $$dummy) (call $$dummy) (call $$dummy)))
(
if (local.get 0) (then) (
else (call $$dummy) (call $$dummy) (call $$dummy)))
(
if (result i32) (local.get 0)
(then (call $$dummy) (call $$dummy) (i32.
const 8) (call $$dummy))
(
else (call $$dummy) (call $$dummy) (i32.
const 9) (call $$dummy))
)
(
if (result i32 i64 i32) (local.get 0)
(then
(call $$dummy) (call $$dummy) (i32.
const 1) (call $$dummy)
(call $$dummy) (call $$dummy) (i64.
const 2) (call $$dummy)
(call $$dummy) (call $$dummy) (i32.
const 3) (call $$dummy)
)
(
else
(call $$dummy) (call $$dummy) (i32.
const -1) (call $$dummy)
(call $$dummy) (call $$dummy) (i64.
const -2) (call $$dummy)
(call $$dummy) (call $$dummy) (i32.
const -3) (call $$dummy)
)
)
(drop) (drop)
)
(func (export
"nested") (param i32 i32) (result i32)
(
if (result i32) (local.get 0)
(then
(
if (local.get 1) (then (call $$dummy) (block) (nop)))
(
if (local.get 1) (then) (
else (call $$dummy) (block) (nop)))
(
if (result i32) (local.get 1)
(then (call $$dummy) (i32.
const 9))
(
else (call $$dummy) (i32.
const 10))
)
)
(
else
(
if (local.get 1) (then (call $$dummy) (block) (nop)))
(
if (local.get 1) (then) (
else (call $$dummy) (block) (nop)))
(
if (result i32) (local.get 1)
(then (call $$dummy) (i32.
const 10))
(
else (call $$dummy) (i32.
const 11))
)
)
)
)
(func (export
"as-select-first") (param i32) (result i32)
(select
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 2) (i32.
const 3)
)
)
(func (export
"as-select-mid") (param i32) (result i32)
(select
(i32.
const 2)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 3)
)
)
(func (export
"as-select-last") (param i32) (result i32)
(select
(i32.
const 2) (i32.
const 3)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
)
)
(func (export
"as-loop-first") (param i32) (result i32)
(loop (result i32)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(call $$dummy) (call $$dummy)
)
)
(func (export
"as-loop-mid") (param i32) (result i32)
(loop (result i32)
(call $$dummy)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(call $$dummy)
)
)
(func (export
"as-loop-last") (param i32) (result i32)
(loop (result i32)
(call $$dummy) (call $$dummy)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
)
)
(func (export
"as-if-condition") (param i32) (result i32)
(
if (result i32)
(
if (result i32) (local.get 0)
(then (i32.
const 1)) (
else (i32.
const 0))
)
(then (call $$dummy) (i32.
const 2))
(
else (call $$dummy) (i32.
const 3))
)
)
(func (export
"as-br_if-first") (param i32) (result i32)
(block (result i32)
(br_if 0
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 2)
)
(
return (i32.
const 3))
)
)
(func (export
"as-br_if-last") (param i32) (result i32)
(block (result i32)
(br_if 0
(i32.
const 2)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
)
(
return (i32.
const 3))
)
)
(func (export
"as-br_table-first") (param i32) (result i32)
(block (result i32)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 2)
(br_table 0 0)
)
)
(func (export
"as-br_table-last") (param i32) (result i32)
(block (result i32)
(i32.
const 2)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(br_table 0 0)
)
)
(func $$func (param i32 i32) (result i32) (local.get 0))
(type $$check (func (param i32 i32) (result i32)))
(table funcref (elem $$func))
(func (export
"as-call_indirect-first") (param i32) (result i32)
(block (result i32)
(call_indirect (type $$check)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 2) (i32.
const 0)
)
)
)
(func (export
"as-call_indirect-mid") (param i32) (result i32)
(block (result i32)
(call_indirect (type $$check)
(i32.
const 2)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 0)
)
)
)
(func (export
"as-call_indirect-last") (param i32) (result i32)
(block (result i32)
(call_indirect (type $$check)
(i32.
const 2) (i32.
const 0)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
)
)
)
(func (export
"as-store-first") (param i32)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.
const 2)
(i32.store)
)
(func (export
"as-store-last") (param i32)
(i32.
const 2)
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 1))
(
else (call $$dummy) (i32.
const 0))
)
(i32.store)
)
(func (export
"as-memory.grow-value") (param i32) (result i32)
(memory.grow
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
)
(func $$f (param i32) (result i32) (local.get 0))
(func (export
"as-call-value") (param i32) (result i32)
(call $$f
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
)
(func (export
"as-return-value") (param i32) (result i32)
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0)))
(
return)
)
(func (export
"as-drop-operand") (param i32)
(drop
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
)
(func (export
"as-br-value") (param i32) (result i32)
(block (result i32)
(br 0
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
)
)
(func (export
"as-local.set-value") (param i32) (result i32)
(local i32)
(local.set 0
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
(local.get 0)
)
(func (export
"as-local.tee-value") (param i32) (result i32)
(local.tee 0
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
)
)
(global $$a (mut i32) (i32.
const 10))
(func (export
"as-global.set-value") (param i32) (result i32)
(global.set $$a
(
if (result i32) (local.get 0)
(then (i32.
const 1))
(
else (i32.
const 0))
)
) (global.get $$a)
)
(func (export
"as-load-operand") (param i32) (result i32)
(i32.load
(
if (result i32) (local.get 0)
(then (i32.
const 11))
(
else (i32.
const 10))
)
)
)
(func (export
"as-unary-operand") (param i32) (result i32)
(i32.ctz
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 13))
(
else (call $$dummy) (i32.
const -13))
)
)
)
(func (export
"as-binary-operand") (param i32 i32) (result i32)
(i32.mul
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 3))
(
else (call $$dummy) (i32.
const -3))
)
(
if (result i32) (local.get 1)
(then (call $$dummy) (i32.
const 4))
(
else (call $$dummy) (i32.
const -5))
)
)
)
(func (export
"as-test-operand") (param i32) (result i32)
(i32.eqz
(
if (result i32) (local.get 0)
(then (call $$dummy) (i32.
const 13))
(
else (call $$dummy) (i32.
const 0))
)
)
)
(func (export
"as-compare-operand") (param i32 i32) (result i32)
(f32.gt
(
if (result f32) (local.get 0)
(then (call $$dummy) (f32.
const 3))
(
else (call $$dummy) (f32.
const -3))
)
(
if (result f32) (local.get 1)
(then (call $$dummy) (f32.
const 4))
(
else (call $$dummy) (f32.
const -4))
)
)
)
(func (export
"as-binary-operands") (param i32) (result i32)
(i32.mul
(
if (result i32 i32) (local.get 0)
(then (call $$dummy) (i32.
const 3) (call $$dummy) (i32.
const 4))
(
else (call $$dummy) (i32.
const 3) (call $$dummy) (i32.
const -4))
)
)
)
(func (export
"as-compare-operands") (param i32) (result i32)
(f32.gt
(
if (result f32 f32) (local.get 0)
(then (call $$dummy) (f32.
const 3) (call $$dummy) (f32.
const 3))
(
else (call $$dummy) (f32.
const -2) (call $$dummy) (f32.
const -3))
)
)
)
(func (export
"as-mixed-operands") (param i32) (result i32)
(
if (result i32 i32) (local.get 0)
(then (call $$dummy) (i32.
const 3) (call $$dummy) (i32.
const 4))
(
else (call $$dummy) (i32.
const -3) (call $$dummy) (i32.
const -4))
)
(i32.
const 5)
(i32.add)
(i32.mul)
)
(func (export
"break-bare") (result i32)
(
if (i32.
const 1) (then (br 0) (unreachable)))
(
if (i32.
const 1) (then (br 0) (unreachable)) (
else (unreachable)))
(
if (i32.
const 0) (then (unreachable)) (
else (br 0) (unreachable)))
(
if (i32.
const 1) (then (br_if 0 (i32.
const 1)) (unreachable)))
(
if (i32.
const 1) (then (br_if 0 (i32.
const 1)) (unreachable)) (
else (unreachable)))
(
if (i32.
const 0) (then (unreachable)) (
else (br_if 0 (i32.
const 1)) (unreachable)))
(
if (i32.
const 1) (then (br_table 0 (i32.
const 0)) (unreachable)))
(
if (i32.
const 1) (then (br_table 0 (i32.
const 0)) (unreachable)) (
else (unreachable)))
(
if (i32.
const 0) (then (unreachable)) (
else (br_table 0 (i32.
const 0)) (unreachable)))
(i32.
const 19)
)
(func (export
"break-value") (param i32) (result i32)
(
if (result i32) (local.get 0)
(then (br 0 (i32.
const 18)) (i32.
const 19))
(
else (br 0 (i32.
const 21)) (i32.
const 20))
)
)
(func (export
"break-multi-value") (param i32) (result i32 i32 i64)
(
if (result i32 i32 i64) (local.get 0)
(then
(br 0 (i32.
const 18) (i32.
const -18) (i64.
const 18))
(i32.
const 19) (i32.
const -19) (i64.
const 19)
)
(
else
(br 0 (i32.
const -18) (i32.
const 18) (i64.
const -18))
(i32.
const -19) (i32.
const 19) (i64.
const -19)
)
)
)
(func (export
"param") (param i32) (result i32)
(i32.
const 1)
(
if (param i32) (result i32) (local.get 0)
(then (i32.
const 2) (i32.add))
(
else (i32.
const -2) (i32.add))
)
)
(func (export
"params") (param i32) (result i32)
(i32.
const 1)
(i32.
const 2)
(
if (param i32 i32) (result i32) (local.get 0)
(then (i32.add))
(
else (i32.sub))
)
)
(func (export
"params-id") (param i32) (result i32)
(i32.
const 1)
(i32.
const 2)
(
if (param i32 i32) (result i32 i32) (local.get 0) (then))
(i32.add)
)
(func (export
"param-break") (param i32) (result i32)
(i32.
const 1)
(
if (param i32) (result i32) (local.get 0)
(then (i32.
const 2) (i32.add) (br 0))
(
else (i32.
const -2) (i32.add) (br 0))
)
)
(func (export
"params-break") (param i32) (result i32)
(i32.
const 1)
(i32.
const 2)
(
if (param i32 i32) (result i32) (local.get 0)
(then (i32.add) (br 0))
(
else (i32.sub) (br 0))
)
)
(func (export
"params-id-break") (param i32) (result i32)
(i32.
const 1)
(i32.
const 2)
(
if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0)))
(i32.add)
)
(func (export
"effects") (param i32) (result i32)
(local i32)
(
if
(block (result i32) (local.set 1 (i32.
const 1)) (local.get 0))
(then
(local.set 1 (i32.mul (local.get 1) (i32.
const 3)))
(local.set 1 (i32.sub (local.get 1) (i32.
const 5)))
(local.set 1 (i32.mul (local.get 1) (i32.
const 7)))
(br 0)
(local.set 1 (i32.mul (local.get 1) (i32.
const 100)))
)
(
else
(local.set 1 (i32.mul (local.get 1) (i32.
const 5)))
(local.set 1 (i32.sub (local.get 1) (i32.
const 7)))
(local.set 1 (i32.mul (local.get 1) (i32.
const 3)))
(br 0)
(local.set 1 (i32.mul (local.get 1) (i32.
const 1000)))
)
)
(local.get 1)
)
;; Examples
(func $$add64_u_with_carry (export
"add64_u_with_carry")
(param $$i i64) (param $$j i64) (param $$c i32) (result i64 i32)
(local $$k i64)
(local.set $$k
(i64.add
(i64.add (local.get $$i) (local.get $$j))
(i64.extend_i32_u (local.get $$c))
)
)
(
return (local.get $$k) (i64.lt_u (local.get $$k) (local.get $$i)))
)
(func $$add64_u_saturated (export
"add64_u_saturated")
(param i64 i64) (result i64)
(call $$add64_u_with_carry (local.get 0) (local.get 1) (i32.
const 0))
(
if (param i64) (result i64)
(then (drop) (i64.
const -1))
)
)
;; Block signature syntax
(type $$block-sig-1 (func))
(type $$block-sig-2 (func (result i32)))
(type $$block-sig-3 (func (param $$x i32)))
(type $$block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32)))
(func (export
"type-use")
(
if (type $$block-sig-1) (i32.
const 1) (then))
(
if (type $$block-sig-2) (i32.
const 1)
(then (i32.
const 0)) (
else (i32.
const 2))
)
(
if (type $$block-sig-3) (i32.
const 1) (then (drop)) (
else (drop)))
(i32.
const 0) (f64.
const 0) (i32.
const 0)
(
if (type $$block-sig-4) (i32.
const 1) (then))
(drop) (drop) (drop)
(
if (type $$block-sig-2) (result i32) (i32.
const 1)
(then (i32.
const 0)) (
else (i32.
const 2))
)
(
if (type $$block-sig-3) (param i32) (i32.
const 1)
(then (drop)) (
else (drop))
)
(i32.
const 0) (f64.
const 0) (i32.
const 0)
(
if (type $$block-sig-4)
(param i32) (param f64 i32) (result i32 f64) (result i32)
(i32.
const 1) (then)
)
(drop) (drop) (drop)
)
;; Atypical folded condition syntax
(func (export
"atypical-condition")
i32.
const 0
(
if (then) (
else))
(
if (i32.
const 1) (i32.eqz) (then) (
else))
)
)`);
// ./test/core/if.wast:537
assert_return(() => invoke($0, `empty`, [0]), []);
// ./test/core/if.wast:538
assert_return(() => invoke($0, `empty`, [1]), []);
// ./test/core/if.wast:539
assert_return(() => invoke($0, `empty`, [100]), []);
// ./test/core/if.wast:540
assert_return(() => invoke($0, `empty`, [-2]), []);
// ./test/core/if.wast:542
assert_return(() => invoke($0, `singular`, [0]), [value(
"i32", 8)]);
// ./test/core/if.wast:543
assert_return(() => invoke($0, `singular`, [1]), [value(
"i32", 7)]);
// ./test/core/if.wast:544
assert_return(() => invoke($0, `singular`, [10]), [value(
"i32", 7)]);
// ./test/core/if.wast:545
assert_return(() => invoke($0, `singular`, [-10]), [value(
"i32", 7)]);
// ./test/core/if.wast:547
assert_return(() => invoke($0, `multi`, [0]), [value(
"i32", 9), value(
"i32", -1)]);
// ./test/core/if.wast:548
assert_return(() => invoke($0, `multi`, [1]), [value(
"i32", 8), value(
"i32", 1)]);
// ./test/core/if.wast:549
assert_return(() => invoke($0, `multi`, [13]), [value(
"i32", 8), value(
"i32", 1)]);
// ./test/core/if.wast:550
assert_return(() => invoke($0, `multi`, [-5]), [value(
"i32", 8), value(
"i32", 1)]);
// ./test/core/if.wast:552
assert_return(() => invoke($0, `nested`, [0, 0]), [value(
"i32", 11)]);
// ./test/core/if.wast:553
assert_return(() => invoke($0, `nested`, [1, 0]), [value(
"i32", 10)]);
// ./test/core/if.wast:554
assert_return(() => invoke($0, `nested`, [0, 1]), [value(
"i32", 10)]);
// ./test/core/if.wast:555
assert_return(() => invoke($0, `nested`, [3, 2]), [value(
"i32", 9)]);
// ./test/core/if.wast:556
assert_return(() => invoke($0, `nested`, [0, -100]), [value(
"i32", 10)]);
// ./test/core/if.wast:557
assert_return(() => invoke($0, `nested`, [10, 10]), [value(
"i32", 9)]);
// ./test/core/if.wast:558
assert_return(() => invoke($0, `nested`, [0, -1]), [value(
"i32", 10)]);
// ./test/core/if.wast:559
assert_return(() => invoke($0, `nested`, [-111, -2]), [value(
"i32", 9)]);
// ./test/core/if.wast:561
assert_return(() => invoke($0, `as-select-first`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:562
assert_return(() => invoke($0, `as-select-first`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:563
assert_return(() => invoke($0, `as-select-mid`, [0]), [value(
"i32", 2)]);
// ./test/core/if.wast:564
assert_return(() => invoke($0, `as-select-mid`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:565
assert_return(() => invoke($0, `as-select-last`, [0]), [value(
"i32", 3)]);
// ./test/core/if.wast:566
assert_return(() => invoke($0, `as-select-last`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:568
assert_return(() => invoke($0, `as-loop-first`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:569
assert_return(() => invoke($0, `as-loop-first`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:570
assert_return(() => invoke($0, `as-loop-mid`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:571
assert_return(() => invoke($0, `as-loop-mid`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:572
assert_return(() => invoke($0, `as-loop-last`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:573
assert_return(() => invoke($0, `as-loop-last`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:575
assert_return(() => invoke($0, `as-if-condition`, [0]), [value(
"i32", 3)]);
// ./test/core/if.wast:576
assert_return(() => invoke($0, `as-if-condition`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:578
assert_return(() => invoke($0, `as-br_if-first`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:579
assert_return(() => invoke($0, `as-br_if-first`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:580
assert_return(() => invoke($0, `as-br_if-last`, [0]), [value(
"i32", 3)]);
// ./test/core/if.wast:581
assert_return(() => invoke($0, `as-br_if-last`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:583
assert_return(() => invoke($0, `as-br_table-first`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:584
assert_return(() => invoke($0, `as-br_table-first`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:585
assert_return(() => invoke($0, `as-br_table-last`, [0]), [value(
"i32", 2)]);
// ./test/core/if.wast:586
assert_return(() => invoke($0, `as-br_table-last`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:588
assert_return(() => invoke($0, `as-call_indirect-first`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:589
assert_return(() => invoke($0, `as-call_indirect-first`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:590
assert_return(() => invoke($0, `as-call_indirect-mid`, [0]), [value(
"i32", 2)]);
// ./test/core/if.wast:591
assert_return(() => invoke($0, `as-call_indirect-mid`, [1]), [value(
"i32", 2)]);
// ./test/core/if.wast:592
assert_return(() => invoke($0, `as-call_indirect-last`, [0]), [value(
"i32", 2)]);
// ./test/core/if.wast:593
assert_trap(() => invoke($0, `as-call_indirect-last`, [1]), `undefined element`);
// ./test/core/if.wast:595
assert_return(() => invoke($0, `as-store-first`, [0]), []);
// ./test/core/if.wast:596
assert_return(() => invoke($0, `as-store-first`, [1]), []);
// ./test/core/if.wast:597
assert_return(() => invoke($0, `as-store-last`, [0]), []);
// ./test/core/if.wast:598
assert_return(() => invoke($0, `as-store-last`, [1]), []);
// ./test/core/if.wast:600
assert_return(() => invoke($0, `as-memory.grow-value`, [0]), [value(
"i32", 1)]);
// ./test/core/if.wast:601
assert_return(() => invoke($0, `as-memory.grow-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:603
assert_return(() => invoke($0, `as-call-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:604
assert_return(() => invoke($0, `as-call-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:606
assert_return(() => invoke($0, `as-return-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:607
assert_return(() => invoke($0, `as-return-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:609
assert_return(() => invoke($0, `as-drop-operand`, [0]), []);
// ./test/core/if.wast:610
assert_return(() => invoke($0, `as-drop-operand`, [1]), []);
// ./test/core/if.wast:612
assert_return(() => invoke($0, `as-br-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:613
assert_return(() => invoke($0, `as-br-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:615
assert_return(() => invoke($0, `as-local.set-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:616
assert_return(() => invoke($0, `as-local.set-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:618
assert_return(() => invoke($0, `as-local.tee-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:619
assert_return(() => invoke($0, `as-local.tee-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:621
assert_return(() => invoke($0, `as-global.set-value`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:622
assert_return(() => invoke($0, `as-global.set-value`, [1]), [value(
"i32", 1)]);
// ./test/core/if.wast:624
assert_return(() => invoke($0, `as-load-operand`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:625
assert_return(() => invoke($0, `as-load-operand`, [1]), [value(
"i32", 0)]);
// ./test/core/if.wast:627
assert_return(() => invoke($0, `as-unary-operand`, [0]), [value(
"i32", 0)]);
// ./test/core/if.wast:628
assert_return(() => invoke($0, `as-unary-operand`, [1]), [value(
"i32", 0)]);
// ./test/core/if.wast:629
assert_return(() => invoke($0, `as-unary-operand`, [-1]), [value(
"i32", 0)]);
// ./test/core/if.wast:631
assert_return(() => invoke($0, `as-binary-operand`, [0, 0]), [value(
"i32", 15)]);
// ./test/core/if.wast:632
assert_return(() => invoke($0, `as-binary-operand`, [0, 1]), [value(
"i32", -12)]);
// ./test/core/if.wast:633
assert_return(() => invoke($0, `as-binary-operand`, [1, 0]), [value(
"i32", -15)]);
// ./test/core/if.wast:634
assert_return(() => invoke($0, `as-binary-operand`, [1, 1]), [value(
"i32", 12)]);
// ./test/core/if.wast:636
assert_return(() => invoke($0, `as-test-operand`, [0]), [value(
"i32", 1)]);
// ./test/core/if.wast:637
assert_return(() => invoke($0, `as-test-operand`, [1]), [value(
"i32", 0)]);
// ./test/core/if.wast:639
assert_return(() => invoke($0, `as-compare-operand`, [0, 0]), [value(
"i32", 1)]);
// ./test/core/if.wast:640
assert_return(() => invoke($0, `as-compare-operand`, [0, 1]), [value(
"i32", 0)]);
// ./test/core/if.wast:641
assert_return(() => invoke($0, `as-compare-operand`, [1, 0]), [value(
"i32", 1)]);
// ./test/core/if.wast:642
assert_return(() => invoke($0, `as-compare-operand`, [1, 1]), [value(
"i32", 0)]);
// ./test/core/if.wast:644
assert_return(() => invoke($0, `as-binary-operands`, [0]), [value(
"i32", -12)]);
// ./test/core/if.wast:645
assert_return(() => invoke($0, `as-binary-operands`, [1]), [value(
"i32", 12)]);
// ./test/core/if.wast:647
assert_return(() => invoke($0, `as-compare-operands`, [0]), [value(
"i32", 1)]);
// ./test/core/if.wast:648
assert_return(() => invoke($0, `as-compare-operands`, [1]), [value(
"i32", 0)]);
// ./test/core/if.wast:650
assert_return(() => invoke($0, `as-mixed-operands`, [0]), [value(
"i32", -3)]);
// ./test/core/if.wast:651
assert_return(() => invoke($0, `as-mixed-operands`, [1]), [value(
"i32", 27)]);
// ./test/core/if.wast:653
assert_return(() => invoke($0, `break-bare`, []), [value(
"i32", 19)]);
// ./test/core/if.wast:654
assert_return(() => invoke($0, `break-value`, [1]), [value(
"i32", 18)]);
// ./test/core/if.wast:655
assert_return(() => invoke($0, `break-value`, [0]), [value(
"i32", 21)]);
// ./test/core/if.wast:656
assert_return(
() => invoke($0, `break-multi-value`, [0]),
[value(
"i32", -18), value(
"i32", 18), value(
"i64", -18n)],
);
// ./test/core/if.wast:659
assert_return(
() => invoke($0, `break-multi-value`, [1]),
[value(
"i32", 18), value(
"i32", -18), value(
"i64", 18n)],
);
// ./test/core/if.wast:663
assert_return(() => invoke($0, `param`, [0]), [value(
"i32", -1)]);
// ./test/core/if.wast:664
assert_return(() => invoke($0, `param`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:665
assert_return(() => invoke($0, `params`, [0]), [value(
"i32", -1)]);
// ./test/core/if.wast:666
assert_return(() => invoke($0, `params`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:667
assert_return(() => invoke($0, `params-id`, [0]), [value(
"i32", 3)]);
// ./test/core/if.wast:668
assert_return(() => invoke($0, `params-id`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:669
assert_return(() => invoke($0, `param-break`, [0]), [value(
"i32", -1)]);
// ./test/core/if.wast:670
assert_return(() => invoke($0, `param-break`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:671
assert_return(() => invoke($0, `params-break`, [0]), [value(
"i32", -1)]);
// ./test/core/if.wast:672
assert_return(() => invoke($0, `params-break`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:673
assert_return(() => invoke($0, `params-id-break`, [0]), [value(
"i32", 3)]);
// ./test/core/if.wast:674
assert_return(() => invoke($0, `params-id-break`, [1]), [value(
"i32", 3)]);
// ./test/core/if.wast:676
assert_return(() => invoke($0, `effects`, [1]), [value(
"i32", -14)]);
// ./test/core/if.wast:677
assert_return(() => invoke($0, `effects`, [0]), [value(
"i32", -6)]);
// ./test/core/if.wast:679
assert_return(() => invoke($0, `add64_u_with_carry`, [0n, 0n, 0]), [value(
"i64", 0n), valu
e("i32", 0)]);
// ./test/core/if.wast:683
assert_return(
() => invoke($0, `add64_u_with_carry`, [100n, 124n, 0]),
[value("i64", 224n), value("i32", 0)],
);
// ./test/core/if.wast:687
assert_return(
() => invoke($0, `add64_u_with_carry`, [-1n, 0n, 0]),
[value("i64", -1n), value("i32", 0)],
);
// ./test/core/if.wast:691
assert_return(() => invoke($0, `add64_u_with_carry`, [-1n, 1n, 0]), [value("i64", 0n), value("i32", 1)]);
// ./test/core/if.wast:695
assert_return(
() => invoke($0, `add64_u_with_carry`, [-1n, -1n, 0]),
[value("i64", -2n), value("i32", 1)],
);
// ./test/core/if.wast:699
assert_return(() => invoke($0, `add64_u_with_carry`, [-1n, 0n, 1]), [value("i64", 0n), value("i32", 1)]);
// ./test/core/if.wast:703
assert_return(() => invoke($0, `add64_u_with_carry`, [-1n, 1n, 1]), [value("i64", 1n), value("i32", 1)]);
// ./test/core/if.wast:707
assert_return(
() => invoke($0, `add64_u_with_carry`, [
-9223372036854775808n,
-9223372036854775808n,
0,
]),
[value("i64", 0n), value("i32", 1)],
);
// ./test/core/if.wast:712
assert_return(() => invoke($0, `add64_u_saturated`, [0n, 0n]), [value("i64", 0n)]);
// ./test/core/if.wast:715
assert_return(() => invoke($0, `add64_u_saturated`, [1230n, 23n]), [value("i64", 1253n)]);
// ./test/core/if.wast:718
assert_return(() => invoke($0, `add64_u_saturated`, [-1n, 0n]), [value("i64", -1n)]);
// ./test/core/if.wast:721
assert_return(() => invoke($0, `add64_u_saturated`, [-1n, 1n]), [value("i64", -1n)]);
// ./test/core/if.wast:724
assert_return(() => invoke($0, `add64_u_saturated`, [-1n, -1n]), [value("i64", -1n)]);
// ./test/core/if.wast:727
assert_return(
() => invoke($0, `add64_u_saturated`, [-9223372036854775808n, -9223372036854775808n]),
[value("i64", -1n)],
);
// ./test/core/if.wast:731
assert_return(() => invoke($0, `type-use`, []), []);
// ./test/core/if.wast:733
assert_return(() => invoke($0, `atypical-condition`, []), []);
// ./test/core/if.wast:735
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (if (type $$sig) (result i32) (param i32) (i32.const 1) (then)) ) `),
`unexpected token`,
);
// ./test/core/if.wast:744
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (if (param i32) (type $$sig) (result i32) (i32.const 1) (then)) ) `),
`unexpected token`,
);
// ./test/core/if.wast:753
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (if (param i32) (result i32) (type $$sig) (i32.const 1) (then)) ) `),
`unexpected token`,
);
// ./test/core/if.wast:762
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (if (result i32) (type $$sig) (param i32) (i32.const 1) (then)) ) `),
`unexpected token`,
);
// ./test/core/if.wast:771
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (if (result i32) (param i32) (type $$sig) (i32.const 1) (then)) ) `),
`unexpected token`,
);
// ./test/core/if.wast:780
assert_malformed(
() => instantiate(`(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then))) `),
`unexpected token`,
);
// ./test/core/if.wast:787
assert_malformed(
() => instantiate(`(func (i32.const 0) (i32.const 1) (if (param $$x i32) (then (drop)) (else (drop))) ) `),
`unexpected token`,
);
// ./test/core/if.wast:795
assert_malformed(
() => instantiate(`(type $$sig (func)) (func (i32.const 1) (if (type $$sig) (result i32) (then (i32.const 0)) (else (i32.const 2))) (unreachable) ) `),
`inline function type`,
);
// ./test/core/if.wast:805
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 1) (if (type $$sig) (result i32) (then (i32.const 0)) (else (i32.const 2))) (unreachable) ) `),
`inline function type`,
);
// ./test/core/if.wast:815
assert_malformed(
() => instantiate(`(type $$sig (func (param i32) (result i32))) (func (i32.const 0) (i32.const 1) (if (type $$sig) (param i32) (then (drop)) (else (drop))) (unreachable) ) `),
`inline function type`,
);
// ./test/core/if.wast:825
assert_malformed(
() => instantiate(`(type $$sig (func (param i32 i32) (result i32))) (func (i32.const 0) (i32.const 1) (if (type $$sig) (param i32) (result i32) (then)) (unreachable) ) `),
`inline function type`,
);
// ./test/core/if.wast:835
assert_invalid(
() => instantiate(`(module
(type $$sig (func))
(func (i32.const 1) (if (type $$sig) (i32.const 0) (then)))
)`),
`type mismatch`,
);
// ./test/core/if.wast:843
assert_invalid(
() => instantiate(`(module (func $$type-empty-i32 (result i32) (if (i32.const 0) (then))))`),
`type mismatch`,
);
// ./test/core/if.wast:847
assert_invalid(
() => instantiate(`(module (func $$type-empty-i64 (result i64) (if (i32.const 0) (then))))`),
`type mismatch`,
);
// ./test/core/if.wast:851
assert_invalid(
() => instantiate(`(module (func $$type-empty-f32 (result f32) (if (i32.const 0) (then))))`),
`type mismatch`,
);
// ./test/core/if.wast:855
assert_invalid(
() => instantiate(`(module (func $$type-empty-f64 (result f64) (if (i32.const 0) (then))))`),
`type mismatch`,
);
// ./test/core/if.wast:860
assert_invalid(
() => instantiate(`(module (func $$type-empty-i32 (result i32) (if (i32.const 0) (then) (else))))`),
`type mismatch`,
);
// ./test/core/if.wast:864
assert_invalid(
() => instantiate(`(module (func $$type-empty-i64 (result i64) (if (i32.const 0) (then) (else))))`),
`type mismatch`,
);
// ./test/core/if.wast:868
assert_invalid(
() => instantiate(`(module (func $$type-empty-f32 (result f32) (if (i32.const 0) (then) (else))))`),
`type mismatch`,
);
// ./test/core/if.wast:872
assert_invalid(
() => instantiate(`(module (func $$type-empty-f64 (result f64) (if (i32.const 0) (then) (else))))`),
`type mismatch`,
);
// ./test/core/if.wast:877
assert_invalid(
() => instantiate(`(module (func $$type-then-value-num-vs-void
(if (i32.const 1) (then (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:883
assert_invalid(
() => instantiate(`(module (func $$type-then-value-num-vs-void-else
(if (i32.const 1) (then (i32.const 1)) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:889
assert_invalid(
() => instantiate(`(module (func $$type-else-value-num-vs-void
(if (i32.const 1) (then) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:895
assert_invalid(
() => instantiate(`(module (func $$type-both-value-num-vs-void
(if (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:902
assert_invalid(
() => instantiate(`(module (func $$type-then-value-nums-vs-void
(if (i32.const 1) (then (i32.const 1) (i32.const 2)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:908
assert_invalid(
() => instantiate(`(module (func $$type-then-value-nums-vs-void-else
(if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:914
assert_invalid(
() => instantiate(`(module (func $$type-else-value-nums-vs-void
(if (i32.const 1) (then) (else (i32.const 1) (i32.const 2)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:920
assert_invalid(
() => instantiate(`(module (func $$type-both-value-nums-vs-void
(if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:927
assert_invalid(
() => instantiate(`(module (func $$type-then-value-empty-vs-num (result i32)
(if (result i32) (i32.const 1) (then) (else (i32.const 0)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:933
assert_invalid(
() => instantiate(`(module (func $$type-else-value-empty-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 0)) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:939
assert_invalid(
() => instantiate(`(module (func $$type-both-value-empty-vs-num (result i32)
(if (result i32) (i32.const 1) (then) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:946
assert_invalid(
() => instantiate(`(module (func $$type-then-value-empty-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:952
assert_invalid(
() => instantiate(`(module (func $$type-else-value-empty-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:958
assert_invalid(
() => instantiate(`(module (func $$type-both-value-empty-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then) (else))
))`),
`type mismatch`,
);
// ./test/core/if.wast:965
assert_invalid(
() => instantiate(`(module (func $$type-no-else-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:971
assert_invalid(
() => instantiate(`(module (func $$type-no-else-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:978
assert_invalid(
() => instantiate(`(module (func $$type-then-value-void-vs-num (result i32)
(if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:984
assert_invalid(
() => instantiate(`(module (func $$type-else-value-void-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:990
assert_invalid(
() => instantiate(`(module (func $$type-both-value-void-vs-num (result i32)
(if (result i32) (i32.const 1) (then (nop)) (else (nop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:997
assert_invalid(
() => instantiate(`(module (func $$type-then-value-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1003
assert_invalid(
() => instantiate(`(module (func $$type-else-value-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1009
assert_invalid(
() => instantiate(`(module (func $$type-both-value-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (nop)) (else (nop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1016
assert_invalid(
() => instantiate(`(module (func $$type-then-value-num-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1022
assert_invalid(
() => instantiate(`(module (func $$type-else-value-num-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1028
assert_invalid(
() => instantiate(`(module (func $$type-both-value-num-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1035
assert_invalid(
() => instantiate(`(module (func $$type-then-value-num-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1041
assert_invalid(
() => instantiate(`(module (func $$type-else-value-num-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1047
assert_invalid(
() => instantiate(`(module (func $$type-both-value-num-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1054
assert_invalid(
() => instantiate(`(module (func $$type-then-value-partial-vs-nums (result i32 i32)
(i32.const 0)
(if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1061
assert_invalid(
() => instantiate(`(module (func $$type-else-value-partial-vs-nums (result i32 i32)
(i32.const 0)
(if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1068
assert_invalid(
() => instantiate(`(module (func $$type-both-value-partial-vs-nums (result i32 i32)
(i32.const 0)
(if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1076
assert_invalid(
() => instantiate(`(module (func $$type-then-value-nums-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1082
assert_invalid(
() => instantiate(`(module (func $$type-else-value-nums-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1088
assert_invalid(
() => instantiate(`(module (func $$type-both-value-nums-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1095
assert_invalid(
() => instantiate(`(module (func $$type-both-different-value-num-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1101
assert_invalid(
() => instantiate(`(module (func $$type-both-different-value-nums-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1108
assert_invalid(
() => instantiate(`(module (func $$type-then-value-unreached-select (result i32)
(if (result i64)
(i32.const 0)
(then (select (unreachable) (unreachable) (unreachable)))
(else (i64.const 0))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1118
assert_invalid(
() => instantiate(`(module (func $$type-else-value-unreached-select (result i32)
(if (result i64)
(i32.const 1)
(then (i64.const 0))
(else (select (unreachable) (unreachable) (unreachable)))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1128
assert_invalid(
() => instantiate(`(module (func $$type-else-value-unreached-select (result i32)
(if (result i64)
(i32.const 1)
(then (select (unreachable) (unreachable) (unreachable)))
(else (select (unreachable) (unreachable) (unreachable)))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1139
assert_invalid(
() => instantiate(`(module (func $$type-then-break-last-void-vs-num (result i32)
(if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1145
assert_invalid(
() => instantiate(`(module (func $$type-else-break-last-void-vs-num (result i32)
(if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1151
assert_invalid(
() => instantiate(`(module (func $$type-then-break-last-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1157
assert_invalid(
() => instantiate(`(module (func $$type-else-break-last-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1164
assert_invalid(
() => instantiate(`(module (func $$type-then-break-empty-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (br 0) (i32.const 1))
(else (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1173
assert_invalid(
() => instantiate(`(module (func $$type-else-break-empty-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (i32.const 1))
(else (br 0) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1182
assert_invalid(
() => instantiate(`(module (func $$type-then-break-empty-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (br 0) (i32.const 1) (i32.const 1))
(else (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1191
assert_invalid(
() => instantiate(`(module (func $$type-else-break-empty-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (i32.const 1) (i32.const 1))
(else (br 0) (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1201
assert_invalid(
() => instantiate(`(module (func $$type-then-break-void-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (br 0 (nop)) (i32.const 1))
(else (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1210
assert_invalid(
() => instantiate(`(module (func $$type-else-break-void-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (i32.const 1))
(else (br 0 (nop)) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1219
assert_invalid(
() => instantiate(`(module (func $$type-then-break-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (br 0 (nop)) (i32.const 1) (i32.const 1))
(else (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1228
assert_invalid(
() => instantiate(`(module (func $$type-else-break-void-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (i32.const 1) (i32.const 1))
(else (br 0 (nop)) (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1238
assert_invalid(
() => instantiate(`(module (func $$type-then-break-num-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (br 0 (i64.const 1)) (i32.const 1))
(else (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1247
assert_invalid(
() => instantiate(`(module (func $$type-else-break-num-vs-num (result i32)
(if (result i32) (i32.const 1)
(then (i32.const 1))
(else (br 0 (i64.const 1)) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1256
assert_invalid(
() => instantiate(`(module (func $$type-then-break-num-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1))
(else (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1265
assert_invalid(
() => instantiate(`(module (func $$type-else-break-num-vs-nums (result i32 i32)
(if (result i32 i32) (i32.const 1)
(then (i32.const 1) (i32.const 1))
(else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1274
assert_invalid(
() => instantiate(`(module (func $$type-then-break-partial-vs-nums (result i32 i32)
(i32.const 1)
(if (result i32 i32) (i32.const 1)
(then (br 0 (i64.const 1)) (i32.const 1))
(else (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1284
assert_invalid(
() => instantiate(`(module (func $$type-else-break-partial-vs-nums (result i32 i32)
(i32.const 1)
(if (result i32 i32) (i32.const 1)
(then (i32.const 1))
(else (br 0 (i64.const 1)) (i32.const 1))
)
))`),
`type mismatch`,
);
// ./test/core/if.wast:1295
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty
(if (then))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1303
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-block
(i32.const 0)
(block (if (then)))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1312
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-loop
(i32.const 0)
(loop (if (then)))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1321
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-then
(i32.const 0) (i32.const 0)
(if (then (if (then))))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1330
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-else
(i32.const 0) (i32.const 0)
(if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0)))
(drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1340
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-br
(i32.const 0)
(block (br 0 (if(then))) (drop))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1349
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-br_if
(i32.const 0)
(block (br_if 0 (if(then)) (i32.const 1)) (drop))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1358
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-br_table
(i32.const 0)
(block (br_table 0 (if(then))) (drop))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1367
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-return
(return (if(then))) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1375
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-select
(select (if(then)) (i32.const 1) (i32.const 2)) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1383
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-call
(call 1 (if(then))) (drop)
)
(func (param i32) (result i32) (local.get 0))
)`),
`type mismatch`,
);
// ./test/core/if.wast:1392
assert_invalid(
() => instantiate(`(module
(func $$f (param i32) (result i32) (local.get 0))
(type $$sig (func (param i32) (result i32)))
(table funcref (elem $$f))
(func $$type-condition-empty-in-call_indirect
(block (result i32)
(call_indirect (type $$sig)
(if(then)) (i32.const 0)
)
(drop)
)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1408
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-local.set
(local i32)
(local.set 0 (if(then))) (local.get 0) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1417
assert_invalid(
() => instantiate(`(module
(func $$type-condition-empty-in-local.tee
(local i32)
(local.tee 0 (if(then))) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1426
assert_invalid(
() => instantiate(`(module
(global $$x (mut i32) (i32.const 0))
(func $$type-condition-empty-in-global.set
(global.set $$x (if(then))) (global.get $$x) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1435
assert_invalid(
() => instantiate(`(module
(memory 0)
(func $$type-condition-empty-in-memory.grow
(memory.grow (if(then))) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1444
assert_invalid(
() => instantiate(`(module
(memory 0)
(func $$type-condition-empty-in-load
(i32.load (if(then))) (drop)
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1453
assert_invalid(
() => instantiate(`(module
(memory 1)
(func $$type-condition-empty-in-store
(i32.store (if(then)) (i32.const 1))
)
)`),
`type mismatch`,
);
// ./test/core/if.wast:1463
assert_invalid(
() => instantiate(`(module (func $$type-param-void-vs-num
(if (param i32) (i32.const 1) (then (drop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1469
assert_invalid(
() => instantiate(`(module (func $$type-param-void-vs-nums
(if (param i32 f64) (i32.const 1) (then (drop) (drop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1475
assert_invalid(
() => instantiate(`(module (func $$type-param-num-vs-num
(f32.const 0) (if (param i32) (i32.const 1) (then (drop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1481
assert_invalid(
() => instantiate(`(module (func $$type-param-num-vs-nums
(f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1487
assert_invalid(
() => instantiate(`(module (func $$type-param-nested-void-vs-num
(block (if (param i32) (i32.const 1) (then (drop))))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1493
assert_invalid(
() => instantiate(`(module (func $$type-param-void-vs-nums
(block (if (param i32 f64) (i32.const 1) (then (drop) (drop))))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1499
assert_invalid(
() => instantiate(`(module (func $$type-param-num-vs-num
(block (f32.const 0) (if (param i32) (i32.const 1) (then (drop))))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1505
assert_invalid(
() => instantiate(`(module (func $$type-param-num-vs-nums
(block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))))
))`),
`type mismatch`,
);
// ./test/core/if.wast:1512
assert_malformed(
() => instantiate(`(func (param i32) (result i32) if (param $$x i32) end) `),
`unexpected token`,
);
// ./test/core/if.wast:1516
assert_malformed(
() => instantiate(`(func (param i32) (result i32) (if (param $$x i32) (then))) `),
`unexpected token`,
);
// ./test/core/if.wast:1521
assert_malformed(() => instantiate(`(func i32.const 0 if end $$l) `), `mismatching label`);
// ./test/core/if.wast:1525
assert_malformed(
() => instantiate(`(func i32.const 0 if $$a end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1529
assert_malformed(
() => instantiate(`(func i32.const 0 if else $$l end) `),
`mismatching label`,
);
// ./test/core/if.wast:1533
assert_malformed(
() => instantiate(`(func i32.const 0 if $$a else $$l end) `),
`mismatching label`,
);
// ./test/core/if.wast:1537
assert_malformed(
() => instantiate(`(func i32.const 0 if else end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1541
assert_malformed(
() => instantiate(`(func i32.const 0 if else $$l end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1545
assert_malformed(
() => instantiate(`(func i32.const 0 if else $$l1 end $$l2) `),
`mismatching label`,
);
// ./test/core/if.wast:1549
assert_malformed(
() => instantiate(`(func i32.const 0 if $$a else end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1553
assert_malformed(
() => instantiate(`(func i32.const 0 if $$a else $$a end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1557
assert_malformed(
() => instantiate(`(func i32.const 0 if $$a else $$l end $$l) `),
`mismatching label`,
);
// ./test/core/if.wast:1561
assert_malformed(
() => instantiate(`(func (if i32.const 0 (then) (else))) `),
`unexpected token`,
);