summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/wasm/reference-table-js-interop.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/reference-table-js-interop.js')
-rw-r--r--deps/v8/test/mjsunit/wasm/reference-table-js-interop.js28
1 files changed, 22 insertions, 6 deletions
diff --git a/deps/v8/test/mjsunit/wasm/reference-table-js-interop.js b/deps/v8/test/mjsunit/wasm/reference-table-js-interop.js
index 7644278edf..fae5471fe4 100644
--- a/deps/v8/test/mjsunit/wasm/reference-table-js-interop.js
+++ b/deps/v8/test/mjsunit/wasm/reference-table-js-interop.js
@@ -3,7 +3,6 @@
// found in the LICENSE file.
// Flags: --experimental-wasm-gc --experimental-wasm-stringref
-// Flags: --no-wasm-gc-structref-as-dataref
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
@@ -12,6 +11,7 @@ let tableTypes = {
"eqref": kWasmEqRef,
"structref": kWasmStructRef,
"arrayref": kWasmArrayRef,
+ "i31ref": kWasmI31Ref,
};
// Test table consistency check.
@@ -115,11 +115,13 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
builder.addFunction("createI31", i31Sig)
.addBody([kExprI32Const, 12, kGCPrefix, kExprI31New])
.exportFunc();
- let structSig = typeName != "arrayref" ? creatorSig : creatorAnySig;
+ let structSig = typeName != "arrayref" && typeName != "i31ref"
+ ? creatorSig : creatorAnySig;
builder.addFunction("createStruct", structSig)
.addBody([kExprI32Const, 12, kGCPrefix, kExprStructNew, struct])
.exportFunc();
- let arraySig = typeName != "structref" ? creatorSig : creatorAnySig;
+ let arraySig = typeName != "structref" && typeName != "i31ref"
+ ? creatorSig : creatorAnySig;
builder.addFunction("createArray", arraySig)
.addBody([
kExprI32Const, 12,
@@ -158,7 +160,7 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
assertSame(table.get(2), table.get(3)); // The same smi.
}
// Set struct.
- if (typeName != "arrayref") {
+ if (typeName != "arrayref" && typeName != "i31ref") {
table.set(4, wasm.exported(wasm.createStruct));
assertSame(table.get(4), wasm.tableGet(4));
assertEquals(12, wasm.tableGetStructVal(4));
@@ -168,7 +170,7 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
assertNotSame(table.get(4), table.get(5));
}
// Set array.
- if (typeName != "structref") {
+ if (typeName != "structref" && typeName != "i31ref") {
table.set(6, wasm.exported(wasm.createArray));
assertSame(table.get(6), wasm.tableGet(6));
assertEquals(12, wasm.tableGetArrayVal(6));
@@ -190,7 +192,7 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
assertEquals(largeString, table.get(9));
}
- if (typeName != "arrayref") {
+ if (typeName != "arrayref" && typeName != "i31ref") {
// Grow table with explicit value.
table.grow(2, wasm.exported(wasm.createStruct));
assertEquals(12, wasm.tableGetStructVal(size));
@@ -205,6 +207,19 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
assertEquals("Grow using a string", wasm.tableGet(14));
assertEquals("Grow using a string", table.get(14));
}
+ if (typeName == "i31ref" || typeName == "anyref") {
+ table.set(0, 123);
+ assertEquals(123, table.get(0));
+ table.set(1, -123);
+ assertEquals(-123, table.get(1));
+ if (typeName == "i31ref") {
+ assertThrows(() => table.set(0, 1 << 31), TypeError);
+ } else {
+ // anyref can reference boxed numbers as well.
+ table.set(0, 1 << 31)
+ assertEquals(1 << 31, table.get(0));
+ }
+ }
// Set from JS with wrapped wasm value of incompatible type.
let invalidValues = {
@@ -212,6 +227,7 @@ for (let [typeName, type] of Object.entries(tableTypes)) {
"eqref": [],
"structref": ["I31", "Array"],
"arrayref": ["I31", "Struct"],
+ "i31ref": ["Struct", "Array"],
};
for (let invalidType of invalidValues[typeName]) {
print(`Test invalid type ${invalidType} for ${typeName}`);