extern.wast 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. (module
  2. (type $ft (func))
  3. (type $st (struct))
  4. (type $at (array i8))
  5. (table 10 anyref)
  6. (elem declare func $f)
  7. (func $f)
  8. (func (export "init") (param $x externref)
  9. (table.set (i32.const 0) (ref.null any))
  10. (table.set (i32.const 1) (ref.i31 (i32.const 7)))
  11. (table.set (i32.const 2) (struct.new_default $st))
  12. (table.set (i32.const 3) (array.new_default $at (i32.const 0)))
  13. (table.set (i32.const 4) (any.convert_extern (local.get $x)))
  14. )
  15. (func (export "internalize") (param externref) (result anyref)
  16. (any.convert_extern (local.get 0))
  17. )
  18. (func (export "externalize") (param anyref) (result externref)
  19. (extern.convert_any (local.get 0))
  20. )
  21. (func (export "externalize-i") (param i32) (result externref)
  22. (extern.convert_any (table.get (local.get 0)))
  23. )
  24. (func (export "externalize-ii") (param i32) (result anyref)
  25. (any.convert_extern (extern.convert_any (table.get (local.get 0))))
  26. )
  27. )
  28. (invoke "init" (ref.extern 0))
  29. (assert_return (invoke "internalize" (ref.extern 1)) (ref.host 1))
  30. (assert_return (invoke "internalize" (ref.null extern)) (ref.null any))
  31. (assert_return (invoke "externalize" (ref.host 2)) (ref.extern 2))
  32. (assert_return (invoke "externalize" (ref.null any)) (ref.null extern))
  33. (assert_return (invoke "externalize-i" (i32.const 0)) (ref.null extern))
  34. (assert_return (invoke "externalize-i" (i32.const 1)) (ref.extern))
  35. (assert_return (invoke "externalize-i" (i32.const 2)) (ref.extern))
  36. (assert_return (invoke "externalize-i" (i32.const 3)) (ref.extern))
  37. (assert_return (invoke "externalize-i" (i32.const 4)) (ref.extern 0))
  38. (assert_return (invoke "externalize-i" (i32.const 5)) (ref.null extern))
  39. (assert_return (invoke "externalize-ii" (i32.const 0)) (ref.null any))
  40. (assert_return (invoke "externalize-ii" (i32.const 1)) (ref.i31))
  41. (assert_return (invoke "externalize-ii" (i32.const 2)) (ref.struct))
  42. (assert_return (invoke "externalize-ii" (i32.const 3)) (ref.array))
  43. (assert_return (invoke "externalize-ii" (i32.const 4)) (ref.host 0))
  44. (assert_return (invoke "externalize-ii" (i32.const 5)) (ref.null any))