Files
scriptc/tests/corpus/checked-builder-cycles.js
Chris Tate 97a489845a Preserve native values through renderer initialization
- Carry BigInts, Sets, and regular expressions through checked native storage without a JavaScript engine.
- Preserve dictionary aliases, spreads, frozen metadata, and fluent initialization helpers.
- Collect checked object and closure cycles while preserving live references.
2026-09-29 00:20:53 -05:00

31 lines
883 B
JavaScript

function builder(text) {
const value = {
append(part) { text = text + part; return value; },
read() { return text; }
};
return value;
}
const live = builder("live");
function unlink(value) { delete value.self; }
let total = 0;
for (let i = 0; i < 2000; i++) {
total += builder("x").append("y").read().length;
const object = Object.create(null);
object.self = object;
object.items = [object];
Object.defineProperty(object, "read", { get: () => object.self, configurable: true });
if (object.read !== object) throw new Error("identity");
if (i % 2 === 0) {
Object.defineProperty(object, "read", { value: "gone", configurable: true });
object.items[0] = null;
unlink(object);
}
const set = new Set();
const holder = Object.create(null);
holder.set = set;
set.add(holder);
set.add(set);
}
console.log(total, live.append("!").read());