bug-2004443.js (799B)
1 function checkMarks(expected) { 2 assertEq(getMarks().join(", "), expected.join(", ")); 3 } 4 5 gczeal(0); 6 gczeal('CheckGrayMarking'); 7 gc(); 8 9 let g1 = newGlobal({newCompartment: true}); 10 let g2 = newGlobal({newCompartment: true}); 11 let defineTestFunction = ` 12 function makeTestObject(s) { 13 let o = {x: s}; 14 addMarkObservers([o]); 15 grayRoot()[0] = o; 16 o = undefined; 17 } 18 `; 19 g1.eval(defineTestFunction); 20 g2.eval(defineTestFunction); 21 22 let s = Symbol(); 23 g1.makeTestObject(s); 24 g2.makeTestObject(s); 25 addMarkObservers([s]); 26 s = undefined; 27 28 checkMarks(['unmarked', 'unmarked', 'unmarked']); 29 30 schedulezone(g1); 31 startgc(); 32 finishgc(); 33 checkMarks(['gray', 'unmarked', 'unmarked']); 34 35 g2.eval('grayRoot()[0].x'); 36 checkMarks(['gray', 'unmarked', 'unmarked']); 37 38 gc(); 39 checkMarks(['gray', 'gray', 'gray']);