Source code

Revision control

Copy as Markdown

Other Tools

// getLineOffsets correctly places the various parts of a ForStatement.
var g = newGlobal({newCompartment: true});
var dbg = Debugger(g);
dbg.onDebuggerStatement = function (frame) {
function handler(line) {
return {hit: function (frame) { g.log += "" + line; }};
}
var s = frame.eval("f").return.script;
for (var line = 2; line <= 6; line++) {
var offs = s.getLineOffsets(g.line0 + line);
var h = handler(line);
for (var i = 0; i < offs.length; i++) {
assertEq(s.getOffsetLocation(offs[i]).lineNumber, g.line0 + line);
s.setBreakpoint(offs[i], h);
}
}
};
g.log = '';
g.eval("var line0 = Error().lineNumber;\n" +
"function f(n) {\n" + // line0 + 1
" for (var i = 0;\n" + // line0 + 2
" i < n;\n" + // line0 + 3
" i++)\n" + // line0 + 4
" log += '.';\n" + // line0 + 5
" log += '!';\n" + // line0 + 6
"}\n" +
"debugger;\n");
assertEq(g.log, "");
g.f(3);
assertEq(g.log, "235.435.435.436!");