bug-1997822.js (623B)
1 // Check gray unmarking running as part of incremental GC correctly unmarks 2 // edges traced via virtual dispatch on the marking tracer. 3 4 function checkMarks(expected) { 5 assertEq(getMarks().join(", "), expected.join(", ")); 6 } 7 8 gczeal(0); 9 gczeal('CheckGrayMarking'); 10 gc(); 11 12 let s = Symbol(); 13 addMarkObservers([s]); 14 15 let m = new Map(); 16 m.set({}, s); 17 addMarkObservers([m]); 18 grayRoot()[0] = m; 19 20 s = undefined; 21 m = undefined; 22 gc(); 23 checkMarks(['gray', 'gray']); 24 25 schedulezone(this); 26 startgc(1); 27 while (gcstate() === 'Prepare') { 28 gcslice(10); 29 } 30 print(gcstate()); 31 m = grayRoot()[0]; 32 finishgc(); 33 checkMarks(['black', 'black']);