table_get.wast 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. (module
  2. (table $t2 2 externref)
  3. (table $t3 3 funcref)
  4. (elem (table $t3) (i32.const 1) func $dummy)
  5. (func $dummy)
  6. (func (export "init") (param $r externref)
  7. (table.set $t2 (i32.const 1) (local.get $r))
  8. (table.set $t3 (i32.const 2) (table.get $t3 (i32.const 1)))
  9. )
  10. (func (export "get-externref") (param $i i32) (result externref)
  11. (table.get (local.get $i))
  12. )
  13. (func $f3 (export "get-funcref") (param $i i32) (result funcref)
  14. (table.get $t3 (local.get $i))
  15. )
  16. (func (export "is_null-funcref") (param $i i32) (result i32)
  17. (ref.is_null (call $f3 (local.get $i)))
  18. )
  19. )
  20. (invoke "init" (ref.extern 1))
  21. (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern))
  22. (assert_return (invoke "get-externref" (i32.const 1)) (ref.extern 1))
  23. (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func))
  24. (assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0))
  25. (assert_return (invoke "is_null-funcref" (i32.const 2)) (i32.const 0))
  26. (assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds table access")
  27. (assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds table access")
  28. (assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds table access")
  29. (assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds table access")
  30. ;; Type errors
  31. (assert_invalid
  32. (module
  33. (table $t 10 externref)
  34. (func $type-index-empty-vs-i32 (result externref)
  35. (table.get $t)
  36. )
  37. )
  38. "type mismatch"
  39. )
  40. (assert_invalid
  41. (module
  42. (table $t 10 externref)
  43. (func $type-index-f32-vs-i32 (result externref)
  44. (table.get $t (f32.const 1))
  45. )
  46. )
  47. "type mismatch"
  48. )
  49. (assert_invalid
  50. (module
  51. (table $t 10 externref)
  52. (func $type-result-externref-vs-empty
  53. (table.get $t (i32.const 0))
  54. )
  55. )
  56. "type mismatch"
  57. )
  58. (assert_invalid
  59. (module
  60. (table $t 10 externref)
  61. (func $type-result-externref-vs-funcref (result funcref)
  62. (table.get $t (i32.const 1))
  63. )
  64. )
  65. "type mismatch"
  66. )
  67. (assert_invalid
  68. (module
  69. (table $t1 1 funcref)
  70. (table $t2 1 externref)
  71. (func $type-result-externref-vs-funcref-multi (result funcref)
  72. (table.get $t2 (i32.const 0))
  73. )
  74. )
  75. "type mismatch"
  76. )