bug-1997896.js (1274B)
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 makeAndReturnObject = ` 12 var o = {}; 13 addMarkObservers([o]); 14 grayRoot()[0] = o; 15 o; 16 `; 17 let o1 = g1.eval(makeAndReturnObject); 18 let o2 = g2.eval(makeAndReturnObject); 19 let s = Symbol(); 20 addMarkObservers([s]); 21 let i = getAtomMarkIndex(s); 22 o1.s = s; 23 o2.s = s; 24 o1 = undefined; 25 o2 = undefined; 26 s = undefined; 27 g1.o = undefined; 28 g2.o = undefined; 29 30 gc(); 31 checkMarks(['gray', 'gray', 'gray']); 32 assertEq(getAtomMarkColor(g1, i), 'gray'); 33 assertEq(getAtomMarkColor(g2, i), 'gray'); 34 35 o1 = g1.eval('grayRoot()[0]'); 36 checkMarks(['black', 'gray', 'black']); 37 assertEq(getAtomMarkColor(g1, i), 'black'); 38 assertEq(getAtomMarkColor(g2, i), 'gray'); 39 40 o2 = g2.eval('grayRoot()[0]'); 41 checkMarks(['black', 'black', 'black']); 42 assertEq(getAtomMarkColor(g1, i), 'black'); 43 assertEq(getAtomMarkColor(g2, i), 'black'); 44 45 o1 = undefined; 46 schedulezone(this); 47 schedulezone(g1); 48 schedulezone('atoms'); 49 startgc(); 50 assertEq(gcstate(), 'NotActive'); 51 52 checkMarks(['gray', 'black', 'black']); 53 assertEq(getAtomMarkColor(g1, i), 'gray'); 54 assertEq(getAtomMarkColor(g2, i), 'black');