| // 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"); |
| |
| let builder = new WasmModuleBuilder(); |
| builder.addMemory(1, 1); // Just to block memory index 0. |
| let $mem1 = builder.addMemory64(1, 1); |
| |
| builder.addActiveDataSegment( |
| 1, [kExprI64Const, 0], [97, 98, 99, 0, 100, 0, 101]); |
| |
| let kSig_w_li = makeSig([kWasmI64, kWasmI32], [kWasmStringRef]); |
| let kSig_i_wl = makeSig([kWasmStringRef, kWasmI64], [kWasmI32]); |
| |
| builder.addFunction("new_wtf8", kSig_w_li).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| kExprLocalGet, 1, |
| ...GCInstr(kExprStringNewUtf8), $mem1, |
| ]); |
| |
| builder.addFunction("new_wtf16", kSig_w_li).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| kExprLocalGet, 1, |
| ...GCInstr(kExprStringNewWtf16), $mem1, |
| ]); |
| |
| builder.addFunction("encode_wtf8", kSig_i_wl).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| kExprLocalGet, 1, |
| ...GCInstr(kExprStringEncodeWtf8), $mem1, |
| ]); |
| |
| builder.addFunction("encode_wtf8_view", kSig_i_wl).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| ...GCInstr(kExprStringAsWtf8), |
| kExprLocalGet, 1, |
| kExprI32Const, 0, // start offset |
| kExprI32Const, 2, // number of bytes |
| ...GCInstr(kExprStringViewWtf8EncodeWtf8), $mem1, |
| kExprReturn, |
| ]); |
| |
| builder.addFunction("encode_wtf16", kSig_i_wl).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| kExprLocalGet, 1, |
| ...GCInstr(kExprStringEncodeWtf16), $mem1, |
| ]); |
| |
| builder.addFunction("encode_wtf16_view", kSig_i_wl).exportFunc().addBody([ |
| kExprLocalGet, 0, |
| ...GCInstr(kExprStringAsWtf16), |
| kExprLocalGet, 1, |
| kExprI32Const, 0, // start offset |
| kExprI32Const, 2, // number of code units |
| ...GCInstr(kExprStringViewWtf16Encode), $mem1, |
| ]); |
| |
| let instance = builder.instantiate(); |
| |
| assertEquals("ab", instance.exports.new_wtf8(0n, 2)); |
| |
| assertEquals("cd", instance.exports.new_wtf16(2n, 2)); |
| |
| assertEquals(2, instance.exports.encode_wtf8("ef", 100n)); |
| assertEquals("ef", instance.exports.new_wtf8(100n, 2)); |
| |
| assertEquals(2, instance.exports.encode_wtf8_view("gh", 100n)); |
| assertEquals("gh", instance.exports.new_wtf8(100n, 2)); |
| |
| assertEquals(2, instance.exports.encode_wtf16("ij", 102n)); |
| assertEquals("ij", instance.exports.new_wtf16(102n, 2)); |
| |
| assertEquals(2, instance.exports.encode_wtf16_view("kl", 102n)); |
| assertEquals("kl", instance.exports.new_wtf16(102n, 2)); |