node/deps/v8/test/mjsunit/sandbox/bytecode-verifier-testing-api.js
Michaël Zasso f1e0b83e7b
deps: update V8 to 14.6.202.33
PR-URL: https://github.com/nodejs/node/pull/61898
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
2026-04-24 18:01:28 +02:00

87 lines
2.2 KiB
JavaScript

// Copyright 2025 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: --allow-natives-syntax
function testSimpleRoundtrip() {
function simple(a, b) {
let c = a + b;
return c * 2;
}
// Ensure simple is compiled and has bytecode
simple(1, 2);
const bytecodeObj = %GetBytecode(simple);
assertEquals("object", typeof bytecodeObj);
assertTrue(bytecodeObj.bytecode instanceof ArrayBuffer);
assertTrue(bytecodeObj.constant_pool instanceof Array);
assertTrue(bytecodeObj.handler_table instanceof ArrayBuffer);
assertEquals("number", typeof bytecodeObj.frame_size);
assertEquals("number", typeof bytecodeObj.parameter_count);
assertEquals("number", typeof bytecodeObj.max_arguments);
assertEquals("number", typeof bytecodeObj.incoming_new_target_or_generator_register);
// simple(a, b) has 2 parameters + receiver = 3
assertEquals(3, bytecodeObj.parameter_count);
%InstallBytecode(simple, bytecodeObj);
assertEquals(6, simple(1, 2));
assertEquals(10, simple(2, 3));
}
function testSimpleTransplant() {
function ret42() { return 42; }
function ret43() { return 43; }
ret42();
ret43();
const bytecodeObjRet42 = %GetBytecode(ret42);
const bytecodeObjRet43 = %GetBytecode(ret43);
%InstallBytecode(ret43, bytecodeObjRet42);
assertEquals(42, ret43());
}
function testExceptionHandlers() {
function withTryCatch() {
try {
throw new Error("catch me");
} catch(e) {
return "caught";
}
}
withTryCatch();
const bc = %GetBytecode(withTryCatch);
assertTrue(bc.handler_table.byteLength > 0);
%InstallBytecode(withTryCatch, bc);
assertEquals("caught", withTryCatch());
}
function testConstants() {
function withConstants() {
return "Hello World!";
}
withConstants();
const bc = %GetBytecode(withConstants);
assertTrue(bc.constant_pool.length > 0);
assertTrue(bc.constant_pool.includes("Hello World!"));
%InstallBytecode(testConstants, bc);
assertEquals("Hello World!", testConstants());
}
testSimpleRoundtrip();
testSimpleTransplant();
testExceptionHandlers();
testConstants();