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>
50 lines
1.8 KiB
JavaScript
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());
|