Frame-onStep-generators-04.js (966B)
1 // Stepping works across `yield` in generators. 2 3 // Set up debuggee. 4 var g = newGlobal({newCompartment: true}); 5 g.log = ""; 6 g.eval(` 7 function* range(stop) { // line 2 8 for (let i = 0; i < stop; i++) { // 3 9 yield i; // 4 10 log += " "; // 5 11 } // 6 12 log += "^"; // 7 13 } // 8 14 `); 15 16 // Set up debugger. 17 let previousLine = -1; 18 let dbg = new Debugger(g); 19 dbg.onEnterFrame = frame => { 20 frame.onStep = function () { 21 assertEq(this, frame); 22 let line = frame.script.getOffsetLocation(frame.offset).lineNumber; 23 if (previousLine != line) { 24 g.log += line; // We stepped to a new line. 25 previousLine = line; 26 } 27 }; 28 dbg.onEnterFrame = undefined; 29 }; 30 31 // Run. 32 for (let value of g.range(3)) { 33 g.log += "*"; 34 } 35 36 assertEq(g.log, "234*5 34*5 34*5 37^8");