Bug 935470 - Update end position after lazily parsing a function. (r=jorendorff)

This commit is contained in:
Shu-yu Guo 2013-11-12 10:51:10 -08:00
parent 5b4cbab056
commit 93b4dbe87b
2 changed files with 25 additions and 0 deletions

View File

@ -2121,6 +2121,9 @@ Parser<FullParseHandler>::functionArgsAndBody(ParseNode *pn, HandleFunction fun,
// Advance this parser over tokens processed by the syntax parser.
parser->tokenStream.tell(&position);
tokenStream.seek(position, parser->tokenStream);
// Update the end position of the parse node.
pn->pn_pos.end = tokenStream.currentToken().pos.end;
}
if (!addFreeVariablesFromLazyFunction(fun, pc))

View File

@ -0,0 +1,22 @@
// Lazy scripts should correctly report line offsets
var g = newGlobal();
var dbg = new Debugger();
g.eval("// Header comment\n" + // <- line 6 in this file
"\n" +
"\n" +
"function f(n) {\n" + // <- line 9 in this file
" var foo = '!';\n" +
"}");
dbg.addDebuggee(g);
var scripts = dbg.findScripts();
var found = false;
for (var i = 0; i < scripts.length; i++) {
found = found || scripts[i].startLine == 6;
// Nothing should have offsets for the deffun on line 9 if lazy scripts
// correctly update the position.
assertEq(scripts[i].getLineOffsets(9).length, 0);
}
assertEq(found, true);