forked from LeenkxTeam/Kmake
54 lines
1.5 KiB
JavaScript
54 lines
1.5 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: --expose-gc --verify-heap
|
|
|
|
function __isPropertyOfType(obj, name, type) {
|
|
desc = Object.getOwnPropertyDescriptor(obj, name);
|
|
return typeof type === 'undefined' || typeof desc.value === type;
|
|
}
|
|
function __getProperties(obj, type) {
|
|
let properties = [];
|
|
for (let name of Object.getOwnPropertyNames(obj)) {
|
|
if (__isPropertyOfType(obj, name, type)) properties.push(name);
|
|
}
|
|
return properties;
|
|
}
|
|
function* __getObjects(root = this, level = 0) {
|
|
let obj_names = __getProperties(root, 'object');
|
|
for (let obj_name of obj_names) {
|
|
let obj = root[obj_name];
|
|
if (obj === root) continue;
|
|
yield obj;
|
|
yield* __getObjects(obj, level + 1);
|
|
}
|
|
}
|
|
function __getRandomObject(seed) {
|
|
let objects = [];
|
|
for (let obj of __getObjects()) {
|
|
objects.push(obj);
|
|
}
|
|
return objects[seed % objects.length];
|
|
}
|
|
function __getRandomProperty(obj, seed) {
|
|
let properties = __getProperties(obj);
|
|
return properties[seed % properties.length];
|
|
}
|
|
(function () {
|
|
__callGC = function () {
|
|
gc();
|
|
};
|
|
})();
|
|
let __v_0 = [ false, "test", Symbol()];
|
|
for (let __v_4 of __v_0) {
|
|
let __v_5 = Object.__v_4;
|
|
let __v_6 = new Proxy({}, {
|
|
});
|
|
try {
|
|
__v_5 = __getRandomObject(926762), __callGC();
|
|
} catch (e) {}
|
|
Object.setPrototypeOf(__v_5, __v_6);
|
|
__v_5[__getRandomProperty(__v_5, 799353)] = __callGC();
|
|
}
|