Path: blob/main/tests/all/pulley_provenance_test_component.wat
3101 views
(component
(type $e' (enum "A" "B" "C"))
(import "host-empty" (func $host-empty))
(import "host-u32" (func $host-u32 (param "x" u32) (result u32)))
(import "e" (type $e (eq $e')))
(import "host-enum" (func $host-enum (param "x" $e) (result $e)))
(import "host-option" (func $host-option (param "x" (option u8)) (result (option u8))))
(type $result (result u16 (error s64)))
(import "host-result" (func $host-result (param "x" $result) (result $result)))
(import "host-string" (func $host-string (param "x" string) (result string)))
(import "host-list" (func $host-list (param "x" (list string)) (result (list string))))
(core module $libc
(memory (export "memory") 1)
(global $last (mut i32) (i32.const 8))
(func $realloc (export "realloc")
(param $old_ptr i32)
(param $old_size i32)
(param $align i32)
(param $new_size i32)
(result i32)
(local $ret i32)
;; fail if the old pointer is non-null
local.get $old_ptr
if
unreachable
end
;; align up `$last`
(global.set $last
(i32.and
(i32.add
(global.get $last)
(i32.add
(local.get $align)
(i32.const -1)))
(i32.xor
(i32.add
(local.get $align)
(i32.const -1))
(i32.const -1))))
;; save the current value of `$last` as the return value
global.get $last
local.set $ret
;; bump our pointer
(global.set $last
(i32.add
(global.get $last)
(local.get $new_size)))
;; while `memory.size` is less than `$last`, grow memory
;; by one page
(loop $loop
(if
(i32.lt_u
(i32.mul (memory.size) (i32.const 65536))
(global.get $last))
(then
i32.const 1
memory.grow
;; test to make sure growth succeeded
i32.const -1
i32.eq
if unreachable end
br $loop)))
local.get $ret
)
)
(core instance $libc (instantiate $libc))
(core func $host-empty (canon lower (func $host-empty)))
(core func $host-u32 (canon lower (func $host-u32)))
(core func $host-enum (canon lower (func $host-enum)))
(core func $host-option (canon lower (func $host-option) (memory $libc "memory")))
(core func $host-result (canon lower (func $host-result) (memory $libc "memory")))
(core func $host-string (canon lower (func $host-string)
(memory $libc "memory") (realloc (func $libc "realloc"))))
(core func $host-list (canon lower (func $host-list)
(memory $libc "memory") (realloc (func $libc "realloc"))))
(type $a (resource (rep i32)))
(core func $new-a (canon resource.new $a))
(core func $drop-a (canon resource.drop $a))
(core module $m
(import "" "host-empty" (func $host-empty))
(import "" "host-u32" (func $host-u32 (param i32) (result i32)))
(import "" "host-enum" (func $host-enum (param i32) (result i32)))
(import "" "host-option" (func $host-option (param i32 i32 i32)))
(import "" "host-result" (func $host-result (param i32 i64 i32)))
(import "" "host-string" (func $host-string (param i32 i32 i32)))
(import "" "host-list" (func $host-list (param i32 i32 i32)))
(import "" "new-a" (func $new-a (param i32) (result i32)))
(import "" "drop-a" (func $drop-a (param i32)))
(func (export "guest-empty") call $host-empty)
(func (export "guest-u32") (param i32) (result i32) local.get 0 call $host-u32)
(func (export "guest-enum") (param i32) (result i32) local.get 0 call $host-enum)
(func (export "guest-option") (param i32 i32) (result i32)
local.get 0
local.get 1
i32.const 100
call $host-option
i32.const 100)
(func (export "guest-result") (param i32 i64) (result i32)
local.get 0
local.get 1
i32.const 96
call $host-result
i32.const 96)
(func (export "guest-string") (param i32 i32) (result i32)
local.get 0
local.get 1
i32.const 96
call $host-string
i32.const 96)
(func (export "guest-list") (param i32 i32) (result i32)
local.get 0
local.get 1
i32.const 96
call $host-list
i32.const 96)
(func (export "resource-intrinsics")
(call $drop-a (call $new-a (i32.const 100)))
)
)
(core instance $i (instantiate $m
(with "libc" (instance $libc))
(with "" (instance
(export "host-empty" (func $host-empty))
(export "host-u32" (func $host-u32))
(export "host-enum" (func $host-enum))
(export "host-option" (func $host-option))
(export "host-result" (func $host-result))
(export "host-string" (func $host-string))
(export "host-list" (func $host-list))
(export "new-a" (func $new-a))
(export "drop-a" (func $drop-a))
))
))
(func (export "guest-empty") (canon lift (core func $i "guest-empty")))
(func (export "guest-u32") (param "x" u32) (result u32)
(canon lift (core func $i "guest-u32")))
(func (export "guest-enum") (param "x" $e) (result $e)
(canon lift (core func $i "guest-enum")))
(func (export "guest-option") (param "x" (option u8)) (result (option u8))
(canon lift (core func $i "guest-option") (memory $libc "memory")))
(func (export "guest-result") (param "x" $result) (result $result)
(canon lift (core func $i "guest-result") (memory $libc "memory")))
(func (export "guest-string") (param "x" string) (result string)
(canon lift (core func $i "guest-string") (memory $libc "memory")
(realloc (func $libc "realloc"))))
(func (export "guest-list") (param "x" (list string)) (result (list string))
(canon lift (core func $i "guest-list") (memory $libc "memory")
(realloc (func $libc "realloc"))))
(func (export "resource-intrinsics")
(canon lift (core func $i "resource-intrinsics") ))
(core module $main
(import "wasi" "random_get" (func $random_get))
(func (export "start") call $random_get)
)
(core module $adapter
(func (export "random_get"))
)
(core module $shim
(table (export "table") 1 1 funcref)
(func (export "random_get") i32.const 0 call_indirect)
)
(core module $fixup
(import "shim" "table" (table $t 1 1 funcref))
(import "" "0" (func $random_get))
(elem (i32.const 0) func $random_get)
)
(core instance $shim (instantiate $shim))
(core instance $main (instantiate $main (with "wasi" (instance $shim))))
(core instance $adapter (instantiate $adapter))
(core instance $fixup (instantiate $fixup
(with "" (instance
(export "0" (func $adapter "random_get"))
))
(with "shim" (instance $shim))
))
(core module $run
(import "" "start" (func))
(start 0)
)
(core instance $run (instantiate $run (with "" (instance $main))))
)