Source code
Revision control
Copy as Markdown
Other Tools
function checkMarks(expected) {
assertEq(getMarks().join(", "), expected.join(", "));
}
gczeal(0);
gczeal('CheckGrayMarking');
gc();
let g1 = newGlobal({newCompartment: true});
let g2 = newGlobal({newCompartment: true});
let defineTestFunction = `
function makeTestObject(s) {
let o = {x: s};
addMarkObservers([o]);
grayRoot()[0] = o;
o = undefined;
}
`;
g1.eval(defineTestFunction);
g2.eval(defineTestFunction);
let s = Symbol();
g1.makeTestObject(s);
g2.makeTestObject(s);
addMarkObservers([s]);
s = undefined;
checkMarks(['unmarked', 'unmarked', 'unmarked']);
schedulezone(g1);
startgc();
finishgc();
checkMarks(['gray', 'unmarked', 'unmarked']);
g2.eval('grayRoot()[0].x');
checkMarks(['gray', 'unmarked', 'unmarked']);
gc();
checkMarks(['gray', 'gray', 'gray']);