blob: d828b4d87f51ca7eb43f97e86c7c32995136c5b8 [file] [log] [blame] [edit]
// META: global=window,dedicatedworker,jsshell
// META: script=/wasm/jsapi/wasm-module-builder.js
let exports = {};
setup(() => {
const builder = new WasmModuleBuilder();
builder.addTable(wasmRefType(kWasmAnyRef), 10, 20, [...wasmI32Const(42), ...GCInstr(kExprRefI31)])
.exportAs("tableAnyNonNullable");
builder.addTable(wasmRefNullType(kWasmAnyRef), 10, 20)
.exportAs("tableAnyNullable");
const buffer = builder.toBuffer();
const module = new WebAssembly.Module(buffer);
const instance = new WebAssembly.Instance(module, {});
exports = instance.exports;
});
test(() => {
exports.tableAnyNullable.grow(5);
for (let i = 0; i < 5; i++)
assert_equals(exports.tableAnyNullable.get(10 + i), null);
}, "grow (nullable anyref)");
test(() => {
assert_throws_js(TypeError, () => { exports.tableAnyNonNullable.grow(5); });
exports.tableAnyNonNullable.grow(5, "foo");
for (let i = 0; i < 5; i++)
assert_equals(exports.tableAnyNonNullable.get(10 + i), "foo");
}, "grow (non-nullable anyref)");
test(() => {
for (let i = 0; i < exports.tableAnyNullable.length; i++) {
exports.tableAnyNullable.set(i);
assert_equals(exports.tableAnyNullable.get(i), null);
}
}, "set (nullable anyref)");
test(() => {
for (let i = 0; i < exports.tableAnyNonNullable.length; i++) {
assert_throws_js(TypeError, () => { exports.tableAnyNonNullable.set(i); });
}
}, "set (non-nullable anyref)");