mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 07:33:15 +00:00

PR-URL: https://github.com/nodejs/node/pull/45579 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
38 lines
1.5 KiB
JavaScript
38 lines
1.5 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
|
|
|
|
import {struct, array} from 'gc-js-interop-export.mjs';
|
|
|
|
// Read struct and array with new wasm module.
|
|
let builder = new WasmModuleBuilder();
|
|
builder.setSingletonRecGroups();
|
|
let struct_type = builder.addStruct([makeField(kWasmI32, true)]);
|
|
let array_type = builder.addArray(kWasmI32, true);
|
|
builder.addFunction('readStruct', makeSig([kWasmExternRef], [kWasmI32]))
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprLocalGet, 0, // --
|
|
kGCPrefix, kExprExternInternalize, // --
|
|
kGCPrefix, kExprRefAsStruct, // --
|
|
kGCPrefix, kExprRefCast, struct_type, // --
|
|
kGCPrefix, kExprStructGet, struct_type, 0, // --
|
|
]);
|
|
builder.addFunction('readArrayLength', makeSig([kWasmExternRef], [kWasmI32]))
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprLocalGet, 0, // --
|
|
kGCPrefix, kExprExternInternalize, // --
|
|
kGCPrefix, kExprRefAsArray, // --
|
|
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));
|