nodejs/deps/v8/test/mjsunit/regress/wasm/regress-327643791.js
Michaël Zasso cfbf9e0d14 deps: update V8 to 12.4.254.14
PR-URL: https://github.com/nodejs/node/pull/52465
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
2024-04-22 21:25:15 +00:00

50 lines
1.8 KiB
JavaScript

// Copyright 2024 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: --wasm-staging
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
const builder = new WasmModuleBuilder();
builder.startRecGroup();
let $array0 = builder.addArray(kWasmI8, true, kNoSuperType, true);
builder.endRecGroup();
let $sig0 = builder.addType(kSig_i_v);
let $sig1 = builder.addType(makeSig([kWasmI32], [wasmRefType(kWasmExternRef)]));
let $sig2 = builder.addType(makeSig([kWasmExternRef, kWasmI32], [kWasmI32]));
let $sig3 = builder.addType(makeSig(
[wasmRefNullType($array0), kWasmI32, kWasmI32],
[wasmRefType(kWasmExternRef)]));
let $fromCharCode = builder.addImport("wasm:js-string", "fromCharCode", $sig1);
let $charCodeAt = builder.addImport("wasm:js-string", "charCodeAt", $sig2);
let $decodeStringFromUTF8Array =
builder.addImport('wasm:text-decoder', 'decodeStringFromUTF8Array', $sig3);
let $main = builder.addFunction("main", $sig0).exportFunc();
// One valid and one invalid UTF-8 byte.
let $data0 = builder.addPassiveDataSegment([97, 141]);
// func $main: [] -> [kWasmI32]
$main.addBody([
// Create an array from the data segment.
kExprI32Const, 0,
kExprI32Const, 2,
kGCPrefix, kExprArrayNewData, $array0, $data0,
// Create a string from the array.
kExprI32Const, 0,
kExprI32Const, 2,
kExprCallFunction, $decodeStringFromUTF8Array,
// The invalid UTF-8 byte should have been replaced with the replacement
// character 0xFFFD. Read it and return it.
kExprI32Const, 1,
kExprCallFunction, $charCodeAt,
]);
let kBuiltins = { builtins: ['js-string', 'text-decoder', 'text-encoder'] };
const instance = builder.instantiate({}, kBuiltins);
assertEquals(0xFFFD, instance.exports.main());