* allow a ComponentTypeRef::Type to point to a component TypeDef * component matching: don't assert exported Interface type definitions are "defined" types may be exported by their name for consumption by some component runtimes, but in wasmtime this doesn't matter (we lift and lower to types, not define them) so we should ignore these. * component-model instance tests: show that an import can export a type definition this is meaningless, but it should be accepted. (previously rejected)
267 lines
5.5 KiB
Plaintext
267 lines
5.5 KiB
Plaintext
(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 "" (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 $rec (record (field "x" (record)) (field "y" string)))
|
|
(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))
|
|
)
|
|
|