diff options
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.js | 28 |
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}`); |