...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/ref_func.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata

     1(module
     2  (func (export "f") (param $x i32) (result i32) (local.get $x))
     3)
     4(register "M")
     5
     6(module
     7  (func $f (import "M" "f") (param i32) (result i32))
     8  (func $g (param $x i32) (result i32)
     9    (i32.add (local.get $x) (i32.const 1))
    10  )
    11
    12  (global funcref (ref.func $f))
    13  (global funcref (ref.func $g))
    14  (global $v (mut funcref) (ref.func $f))
    15
    16  (global funcref (ref.func $gf1))
    17  (global funcref (ref.func $gf2))
    18  (func (drop (ref.func $ff1)) (drop (ref.func $ff2)))
    19  (elem declare func $gf1 $ff1)
    20  (elem declare funcref (ref.func $gf2) (ref.func $ff2))
    21  (func $gf1)
    22  (func $gf2)
    23  (func $ff1)
    24  (func $ff2)
    25
    26  (func (export "is_null-f") (result i32)
    27    (ref.is_null (ref.func $f))
    28  )
    29  (func (export "is_null-g") (result i32)
    30    (ref.is_null (ref.func $g))
    31  )
    32  (func (export "is_null-v") (result i32)
    33    (ref.is_null (global.get $v))
    34  )
    35
    36  (func (export "set-f") (global.set $v (ref.func $f)))
    37  (func (export "set-g") (global.set $v (ref.func $g)))
    38
    39  (table $t 1 funcref)
    40  (elem declare func $f $g)
    41
    42  (func (export "call-f") (param $x i32) (result i32)
    43    (table.set $t (i32.const 0) (ref.func $f))
    44    (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0))
    45  )
    46  (func (export "call-g") (param $x i32) (result i32)
    47    (table.set $t (i32.const 0) (ref.func $g))
    48    (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0))
    49  )
    50  (func (export "call-v") (param $x i32) (result i32)
    51    (table.set $t (i32.const 0) (global.get $v))
    52    (call_indirect $t (param i32) (result i32) (local.get $x) (i32.const 0))
    53  )
    54)
    55
    56(assert_return (invoke "is_null-f") (i32.const 0))
    57(assert_return (invoke "is_null-g") (i32.const 0))
    58(assert_return (invoke "is_null-v") (i32.const 0))
    59
    60(assert_return (invoke "call-f" (i32.const 4)) (i32.const 4))
    61(assert_return (invoke "call-g" (i32.const 4)) (i32.const 5))
    62(assert_return (invoke "call-v" (i32.const 4)) (i32.const 4))
    63(invoke "set-g")
    64(assert_return (invoke "call-v" (i32.const 4)) (i32.const 5))
    65(invoke "set-f")
    66(assert_return (invoke "call-v" (i32.const 4)) (i32.const 4))
    67
    68(assert_invalid
    69  (module
    70    (func $f (import "M" "f") (param i32) (result i32))
    71    (func $g (import "M" "g") (param i32) (result i32))
    72    (global funcref (ref.func 7))
    73  )
    74  "unknown function 7"
    75)
    76
    77
    78;; Reference declaration
    79
    80(module
    81  (func $f1)
    82  (func $f2)
    83  (func $f3)
    84  (func $f4)
    85  (func $f5)
    86  (func $f6)
    87
    88  (table $t 1 funcref)
    89
    90  (global funcref (ref.func $f1))
    91  (export "f" (func $f2))
    92  (elem (table $t) (i32.const 0) func $f3)
    93  (elem (table $t) (i32.const 0) funcref (ref.func $f4))
    94  (elem func $f5)
    95  (elem funcref (ref.func $f6))
    96
    97  (func
    98    (ref.func $f1)
    99    (ref.func $f2)
   100    (ref.func $f3)
   101    (ref.func $f4)
   102    (ref.func $f5)
   103    (ref.func $f6)
   104    (return)
   105  )
   106)
   107
   108(assert_invalid
   109  (module (func $f (drop (ref.func $f))))
   110  "undeclared function reference"
   111)
   112(assert_invalid
   113  (module (start $f) (func $f (drop (ref.func $f))))
   114  "undeclared function reference"
   115)

View as plain text