Source code

Revision control

Copy as Markdown

Other Tools

gczeal(0);
for (let p of [false, true]) {
f(p);
// Run an incremental GC to completion.
startgc(1);
while (gcstate() !== 'NotActive') {
gcslice(10000, { dontStart: true });
}
}
function ccwToObject() {
return evalcx('({})', newGlobal({newCompartment: true}));
}
function ccwToRegistry() {
return evalcx('new FinalizationRegistry(value => {})',
newGlobal({newCompartment: true}));
}
function f(p) {
let registry = ccwToRegistry();
let target = ccwToObject();
registry.register(target, undefined);
// Add a CCW from registry to target zone or vice versa to control
// the order the zones are swept in.
if (p) {
registry.ptr = target;
} else {
target.ptr = registry;
}
gc();
}