node/deps/v8/test/mjsunit/regress/regress-v8-13190.js
Yagiz Nizipli 16e03e7968 deps: update V8 to 10.9.194.4
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>
2022-11-27 17:27:13 +00:00

49 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: --allow-natives-syntax --expose-gc
// Flags: --no-sparkplug --no-maglev --no-turbofan
// Flags: --lazy --flush-bytecode
// Helper that, given a template object, simply returns it.
function get_template_object(obj) {
return obj;
}
function foo_factory() {
// The SFI for foo is held by the bytecode array of foo_factory, so will be
// collected if foo_factory's bytecode is flushed.
return function foo() {
return get_template_object``
}
}
// Create foo in another function to avoid it leaking on the global object or
// top-level script locals, and accidentally being kept alive.
function get_foo_template_object() {
let foo = foo_factory();
return foo();
}
assertTrue(isLazy(foo_factory));
let inital_template_object = get_foo_template_object();
assertEquals(inital_template_object, get_foo_template_object(),
"Template object identity should be preserved");
// Force a flush of foo_factory, so that the SharedFunctionInfo of foo can be
// collected.
%ForceFlush(foo_factory);
assertTrue(isLazy(foo_factory));
// Do a few more GCs to allow weak maps to be cleared.
gc();
gc();
gc();
// Flushing foo_factory and GCing foo should not affect the persisted reference
// identity of the template object inside foo.
assertSame(inital_template_object, get_foo_template_object(),
"Template object identity should be preserved");