You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
5.6 KiB
269 lines
5.6 KiB
(component
|
|
(core module $m)
|
|
(core instance (instantiate $m))
|
|
)
|
|
|
|
(component
|
|
(core module $m
|
|
(func (export ""))
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
|
|
(core module $m2
|
|
(func (import "" ""))
|
|
)
|
|
(core instance (instantiate $m2 (with "" (instance $i))))
|
|
)
|
|
|
|
(component
|
|
(core module $m
|
|
(func (export "a"))
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
|
|
(core module $m2
|
|
(func (import "" "b"))
|
|
)
|
|
(core instance (instantiate $m2
|
|
(with "" (instance (export "b" (func $i "a"))))
|
|
))
|
|
)
|
|
|
|
;; all kinds of imports for core wasm modules, and register a start function on
|
|
;; one module to ensure that everything is correct
|
|
(component
|
|
(core module $m
|
|
(func (export "a"))
|
|
(table (export "b") 1 funcref)
|
|
(memory (export "c") 1)
|
|
(global (export "d") i32 i32.const 1)
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
|
|
(core module $m2
|
|
(import "" "a" (func $f))
|
|
(import "" "b" (table 1 funcref))
|
|
(import "" "c" (memory 1))
|
|
(import "" "d" (global $g i32))
|
|
|
|
(func $start
|
|
global.get $g
|
|
i32.const 1
|
|
i32.ne
|
|
if
|
|
unreachable
|
|
end
|
|
|
|
call $f
|
|
)
|
|
|
|
(start $start)
|
|
|
|
(data (i32.const 0) "hello")
|
|
(elem (i32.const 0) $start)
|
|
)
|
|
(core instance (instantiate $m2
|
|
(with "" (instance $i))
|
|
))
|
|
)
|
|
|
|
;; Test to see if a component with a type export can be instantiated.
|
|
(component
|
|
(type string)
|
|
(export "a" (type 0))
|
|
)
|
|
|
|
;; double-check the start function runs by ensuring that a trap shows up and it
|
|
;; sees the wrong value for the global import
|
|
(assert_trap
|
|
(component
|
|
(core module $m
|
|
(global (export "g") i32 i32.const 1)
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
|
|
(core module $m2
|
|
(import "" "g" (global $g i32))
|
|
|
|
(func $start
|
|
global.get $g
|
|
i32.const 0
|
|
i32.ne
|
|
if
|
|
unreachable
|
|
end
|
|
)
|
|
|
|
(start $start)
|
|
)
|
|
(core instance (instantiate $m2 (with "" (instance $i))))
|
|
)
|
|
"unreachable")
|
|
|
|
;; shuffle around imports to get to what the target core wasm module needs
|
|
(component
|
|
(core module $m
|
|
(func (export "1"))
|
|
(table (export "2") 1 funcref)
|
|
(memory (export "3") 1)
|
|
(global (export "4") i32 i32.const 1)
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
|
|
(core module $m2
|
|
(import "" "a" (func $f))
|
|
(import "" "b" (table 1 funcref))
|
|
(import "" "c" (memory 1))
|
|
(import "" "d" (global $g i32))
|
|
)
|
|
(core instance (instantiate $m2
|
|
(with "" (instance
|
|
(export "a" (func $i "1"))
|
|
(export "b" (table $i "2"))
|
|
(export "c" (memory $i "3"))
|
|
(export "d" (global $i "4"))
|
|
))
|
|
))
|
|
)
|
|
|
|
;; indirect references through a synthetic instance
|
|
(component
|
|
(core module $m
|
|
(func (export "a"))
|
|
(table (export "b") 1 funcref)
|
|
(memory (export "c") 1)
|
|
(global (export "d") i32 i32.const 1)
|
|
)
|
|
(core instance $i (instantiate $m))
|
|
(core instance $i2
|
|
(export "a1" (func $i "a"))
|
|
(export "a2" (table $i "b"))
|
|
(export "a3" (memory $i "c"))
|
|
(export "a4" (global $i "d"))
|
|
)
|
|
|
|
(core module $m2
|
|
(import "" "1" (func $f))
|
|
(import "" "2" (table 1 funcref))
|
|
(import "" "3" (memory 1))
|
|
(import "" "4" (global $g i32))
|
|
)
|
|
(core instance (instantiate $m2
|
|
(with "" (instance
|
|
(export "1" (func $i2 "a1"))
|
|
(export "2" (table $i2 "a2"))
|
|
(export "3" (memory $i2 "a3"))
|
|
(export "4" (global $i2 "a4"))
|
|
))
|
|
))
|
|
)
|
|
|
|
(component
|
|
(import "host" (instance $i (export "return-three" (func (result u32)))))
|
|
|
|
(core module $m
|
|
(import "host" "return-three" (func $three (result i32)))
|
|
(func $start
|
|
call $three
|
|
i32.const 3
|
|
i32.ne
|
|
if unreachable end
|
|
)
|
|
(start $start)
|
|
)
|
|
(core func $three_lower
|
|
(canon lower (func $i "return-three"))
|
|
)
|
|
(core instance (instantiate $m
|
|
(with "host" (instance (export "return-three" (func $three_lower))))
|
|
))
|
|
)
|
|
|
|
(component
|
|
(import "host" (instance $i
|
|
(type $x' (record (field "x" u32)))
|
|
(export $x "x" (type (eq $x')))
|
|
(type $rec' (record (field "x" $x) (field "y" string)))
|
|
(export $rec "rec" (type (eq $rec')))
|
|
(export "some-record" (type (eq $rec)))))
|
|
)
|
|
|
|
(component
|
|
(import "host" (instance $i
|
|
(export "nested" (instance
|
|
(export "return-four" (func (result u32)))
|
|
))
|
|
))
|
|
|
|
(core module $m
|
|
(import "host" "return-three" (func $three (result i32)))
|
|
(func $start
|
|
call $three
|
|
i32.const 4
|
|
i32.ne
|
|
if unreachable end
|
|
)
|
|
(start $start)
|
|
)
|
|
(core func $three_lower
|
|
(canon lower (func $i "nested" "return-four"))
|
|
)
|
|
(core instance (instantiate $m
|
|
(with "host" (instance (export "return-three" (func $three_lower))))
|
|
))
|
|
)
|
|
|
|
(component
|
|
(import "host" (instance $i
|
|
(export "simple-module" (core module))
|
|
))
|
|
|
|
(core instance (instantiate (module $i "simple-module")))
|
|
)
|
|
|
|
(component
|
|
(import "host" (instance $i
|
|
(export "simple-module" (core module
|
|
(export "f" (func (result i32)))
|
|
(export "g" (global i32))
|
|
))
|
|
))
|
|
|
|
(core instance $i (instantiate (module $i "simple-module")))
|
|
(core module $verify
|
|
(import "host" "f" (func $f (result i32)))
|
|
(import "host" "g" (global $g i32))
|
|
|
|
(func $start
|
|
call $f
|
|
i32.const 101
|
|
i32.ne
|
|
if unreachable end
|
|
|
|
global.get $g
|
|
i32.const 100
|
|
i32.ne
|
|
if unreachable end
|
|
)
|
|
(start $start)
|
|
)
|
|
|
|
(core instance (instantiate $verify (with "host" (instance $i))))
|
|
)
|
|
|
|
;; export an instance
|
|
(component
|
|
(core module $m)
|
|
(instance $i (export "m" (core module $m)))
|
|
(export "i" (instance $i))
|
|
)
|
|
(component
|
|
(component $c)
|
|
(instance $i (instantiate $c))
|
|
(export "i" (instance $i))
|
|
)
|
|
(component
|
|
(import "host" (instance $i))
|
|
(export "i" (instance $i))
|
|
)
|
|
|
|
|