Frame-onStep-15.js (1248B)
1 // Test how stepping interacts with for(;;) statements. 2 3 let g = newGlobal({newCompartment: true}); 4 5 // We want a for(;;) loop whose body is evaluated at least once, to 6 // see whether the loop head is hit a second time. 7 g.eval(`function f() { 8 let x = 0; 9 debugger; // +0 10 for(;;) { // +1 11 if (x++ == 1) break; // +2 12 } // +3 13 debugger; // +4 14 }`); 15 16 let dbg = Debugger(g); 17 18 function test(s, expected) { 19 let result = ''; 20 21 dbg.onDebuggerStatement = function(frame) { 22 // On the second debugger statement, we're done. 23 dbg.onDebuggerStatement = function(frame) { 24 frame.onStep = undefined; 25 }; 26 27 let debugLine = frame.script.getOffsetLocation(frame.offset).lineNumber; 28 frame.onStep = function() { 29 // Only examine stops at entry points for the line. 30 let lineNo = this.script.getOffsetLocation(this.offset).lineNumber; 31 if (this.script.getLineOffsets(lineNo).indexOf(this.offset) < 0) { 32 return undefined; 33 } 34 35 let delta = this.script.getOffsetLocation(this.offset).lineNumber - debugLine; 36 result += delta; 37 }; 38 }; 39 g.eval(s); 40 assertEq(result, expected); 41 } 42 43 test('f()', '2124');