...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata/func_ptrs.wast

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

     1(module
     2  (type    (func))                           ;; 0: void -> void
     3  (type $S (func))                           ;; 1: void -> void
     4  (type    (func (param)))                   ;; 2: void -> void
     5  (type    (func (result i32)))              ;; 3: void -> i32
     6  (type    (func (param) (result i32)))      ;; 4: void -> i32
     7  (type $T (func (param i32) (result i32)))  ;; 5: i32 -> i32
     8  (type $U (func (param i32)))               ;; 6: i32 -> void
     9
    10  (func $print (import "spectest" "print_i32") (type 6))
    11
    12  (func (type 0))
    13  (func (type $S))
    14
    15  (func (export "one") (type 4) (i32.const 13))
    16  (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1)))
    17
    18  ;; Both signature and parameters are allowed (and required to match)
    19  ;; since this allows the naming of parameters.
    20  (func (export "three") (type $T) (param $a i32) (result i32)
    21    (i32.sub (local.get 0) (i32.const 2))
    22  )
    23
    24  (func (export "four") (type $U) (call $print (local.get 0)))
    25)
    26
    27(assert_return (invoke "one") (i32.const 13))
    28(assert_return (invoke "two" (i32.const 13)) (i32.const 14))
    29(assert_return (invoke "three" (i32.const 13)) (i32.const 11))
    30(invoke "four" (i32.const 83))
    31
    32(assert_invalid (module (elem (i32.const 0))) "unknown table")
    33(assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table")
    34
    35(assert_invalid
    36  (module (table 1 funcref) (elem (i64.const 0)))
    37  "type mismatch"
    38)
    39(assert_invalid
    40  (module (table 1 funcref) (elem (i32.ctz (i32.const 0))))
    41  "constant expression required"
    42)
    43(assert_invalid
    44  (module (table 1 funcref) (elem (nop)))
    45  "constant expression required"
    46)
    47
    48(assert_invalid (module (func (type 42))) "unknown type")
    49(assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type")
    50
    51(module
    52  (type $T (func (param) (result i32)))
    53  (type $U (func (param) (result i32)))
    54  (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3))
    55
    56  (func $t1 (type $T) (i32.const 1))
    57  (func $t2 (type $T) (i32.const 2))
    58  (func $t3 (type $T) (i32.const 3))
    59  (func $u1 (type $U) (i32.const 4))
    60  (func $u2 (type $U) (i32.const 5))
    61
    62  (func (export "callt") (param $i i32) (result i32)
    63    (call_indirect (type $T) (local.get $i))
    64  )
    65
    66  (func (export "callu") (param $i i32) (result i32)
    67    (call_indirect (type $U) (local.get $i))
    68  )
    69)
    70
    71(assert_return (invoke "callt" (i32.const 0)) (i32.const 1))
    72(assert_return (invoke "callt" (i32.const 1)) (i32.const 2))
    73(assert_return (invoke "callt" (i32.const 2)) (i32.const 3))
    74(assert_return (invoke "callt" (i32.const 3)) (i32.const 4))
    75(assert_return (invoke "callt" (i32.const 4)) (i32.const 5))
    76(assert_return (invoke "callt" (i32.const 5)) (i32.const 1))
    77(assert_return (invoke "callt" (i32.const 6)) (i32.const 3))
    78(assert_trap (invoke "callt" (i32.const 7)) "undefined element")
    79(assert_trap (invoke "callt" (i32.const 100)) "undefined element")
    80(assert_trap (invoke "callt" (i32.const -1)) "undefined element")
    81
    82(assert_return (invoke "callu" (i32.const 0)) (i32.const 1))
    83(assert_return (invoke "callu" (i32.const 1)) (i32.const 2))
    84(assert_return (invoke "callu" (i32.const 2)) (i32.const 3))
    85(assert_return (invoke "callu" (i32.const 3)) (i32.const 4))
    86(assert_return (invoke "callu" (i32.const 4)) (i32.const 5))
    87(assert_return (invoke "callu" (i32.const 5)) (i32.const 1))
    88(assert_return (invoke "callu" (i32.const 6)) (i32.const 3))
    89(assert_trap (invoke "callu" (i32.const 7)) "undefined element")
    90(assert_trap (invoke "callu" (i32.const 100)) "undefined element")
    91(assert_trap (invoke "callu" (i32.const -1)) "undefined element")
    92
    93(module
    94  (type $T (func (result i32)))
    95  (table funcref (elem 0 1))
    96
    97  (func $t1 (type $T) (i32.const 1))
    98  (func $t2 (type $T) (i32.const 2))
    99
   100  (func (export "callt") (param $i i32) (result i32)
   101    (call_indirect (type $T) (local.get $i))
   102  )
   103)
   104
   105(assert_return (invoke "callt" (i32.const 0)) (i32.const 1))
   106(assert_return (invoke "callt" (i32.const 1)) (i32.const 2))

View as plain text