Frame-onPop-15.js (835B)
1 // Each resumption of a generator gets the same Frame; its onPop handler 2 // fires each time the generator yields. 3 4 var g = newGlobal({newCompartment: true}); 5 var dbg = new Debugger(g); 6 var log; 7 8 var seenFrame = null; 9 dbg.onDebuggerStatement = function handleDebugger(frame) { 10 log += 'd'; 11 assertEq(frame.type, "call"); 12 13 if (seenFrame === null) { 14 seenFrame = frame; 15 } else { 16 assertEq(seenFrame, frame); 17 } 18 19 let i = frame.eval('i').return; 20 if (i % 3 == 0) { 21 frame.onPop = function handlePop(c) { 22 assertEq(this, seenFrame); 23 log += ')' + i; 24 }; 25 } 26 }; 27 28 g.eval("function* g() { for (var i = 0; i < 10; i++) { debugger; yield i; } }"); 29 log =''; 30 assertEq(g.eval("var t = 0; for (j of g()) t += j; t;"), 45); 31 assertEq(log, "d)0d)0d)0d)3d)3d)3d)6d)6d)6d)9)9");