node/deps/v8/test/mjsunit/wasm/gc-js-interop-import.mjs
Michaël Zasso d8c97e4857
deps: update V8 to 11.9.169.7
PR-URL: https://github.com/nodejs/node/pull/50115
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
2024-01-04 09:30:13 +01:00

36 lines
1.4 KiB
JavaScript

// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --experimental-wasm-gc --allow-natives-syntax
// Flags: --turbofan --no-always-turbofan
import {struct, array} from 'gc-js-interop-export.mjs';
// Read struct and array with new wasm module.
let builder = new WasmModuleBuilder();
let struct_type = builder.addStruct([makeField(kWasmI32, true)]);
builder.addFunction('readStruct', makeSig([kWasmExternRef], [kWasmI32]))
.exportFunc()
.addBody([
kExprLocalGet, 0, // --
kGCPrefix, kExprExternInternalize, // --
kGCPrefix, kExprRefCast, struct_type, // --
kGCPrefix, kExprStructGet, struct_type, 0, // --
]);
builder.addFunction('readArrayLength', makeSig([kWasmExternRef], [kWasmI32]))
.exportFunc()
.addBody([
kExprLocalGet, 0, // --
kGCPrefix, kExprExternInternalize, // --
kGCPrefix, kExprRefCast, kArrayRefCode, // --
kGCPrefix, kExprArrayLen,
]);
let instance = builder.instantiate();
let wasm = instance.exports;
assertEquals(42, wasm.readStruct(struct));
assertEquals(2, wasm.readArrayLength(array));
assertTraps(kTrapIllegalCast, () => wasm.readStruct(array));
assertTraps(kTrapIllegalCast, () => wasm.readArrayLength(struct));