Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !wasmComponentsEnabled()
// ----------------------------------------------------------------------------
// Core export aliases - happy paths
// Alias each of the five core sorts individually.
wasmValidateText(`
(component
(core module (func (export "f")))
(core instance (instantiate 0))
(alias core export 0 "f" (core func))
)
`);
wasmValidateText(`
(component
(core module (table (export "t") 0 0 funcref))
(core instance (instantiate 0))
(alias core export 0 "t" (core table))
)
`);
wasmValidateText(`
(component
(core module (memory (export "m") 0 0))
(core instance (instantiate 0))
(alias core export 0 "m" (core memory))
)
`);
wasmValidateText(`
(component
(core module (global (export "g") i32 (i32.const 0)))
(core instance (instantiate 0))
(alias core export 0 "g" (core global))
)
`);
wasmValidateText(`
(component
(core module (tag (export "e")))
(core instance (instantiate 0))
(alias core export 0 "e" (core tag))
)
`);
// All five sorts from one instance.
wasmValidateText(`
(component
(core module
(func (export "func"))
(table (export "table") 0 0 funcref)
(memory (export "memory") 0 0)
(global (export "global") i32 (i32.const 0))
(tag (export "tag"))
)
(core instance (instantiate 0))
(alias core export 0 "func" (core func))
(alias core export 0 "table" (core table))
(alias core export 0 "memory" (core memory))
(alias core export 0 "global" (core global))
(alias core export 0 "tag" (core tag))
)
`);
// ----------------------------------------------------------------------------
// Core export aliases - error cases
// Invalid core instance index.
wasmFailValidateText(`
(component
(core module (func (export "f")))
(core instance (instantiate 0))
(alias core export 1 "f" (core func))
)
`, /invalid core instance index/);
// Export name not found on the instance.
wasmFailValidateText(`
(component
(core module (func (export "f")))
(core instance (instantiate 0))
(alias core export 0 "nope" (core func))
)
`, /has no export "nope"/);
// Sort mismatch: requesting (core func) but export is a global.
wasmFailValidateText(`
(component
(core module (global (export "g") i32 (i32.const 0)))
(core instance (instantiate 0))
(alias core export 0 "g" (core func))
)
`, /is not a function/);
// Sort mismatch: requesting (core table) but export is a function.
wasmFailValidateText(`
(component
(core module (func (export "f")))
(core instance (instantiate 0))
(alias core export 0 "f" (core table))
)
`, /is not a table/);
// Sort mismatch: requesting (core memory) but export is a global.
wasmFailValidateText(`
(component
(core module (global (export "g") i32 (i32.const 0)))
(core instance (instantiate 0))
(alias core export 0 "g" (core memory))
)
`, /is not a memory/);
// Sort mismatch: requesting (core global) but export is a tag.
wasmFailValidateText(`
(component
(core module (tag (export "e")))
(core instance (instantiate 0))
(alias core export 0 "e" (core global))
)
`, /is not a global/);
// Sort mismatch: requesting (core tag) but export is a global.
wasmFailValidateText(`
(component
(core module (global (export "g") i32 (i32.const 0)))
(core instance (instantiate 0))
(alias core export 0 "g" (core tag))
)
`, /is not a tag/);
// ----------------------------------------------------------------------------
// Component export alias
// TODO(wasm-cm)
wasmFailValidateText(`
(component
(component
(export "inner" (type 0))
)
(instance (instantiate 0))
(alias export 0 "inner" (type))
)
`, /unexpected section ID/);
// ----------------------------------------------------------------------------
// Outer alias
// TODO(wasm-cm)
wasmFailValidateText(`
(component
(type u32)
(component
(alias outer 1 0 (type))
)
)
`, /unexpected section ID/);