--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java 2015-03-09 10:46:00.966959008 +0530 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java 2015-03-09 10:46:00.870958532 +0530 @@ -77,7 +77,9 @@ import jdk.nashorn.internal.ir.CaseNode; import jdk.nashorn.internal.ir.CatchNode; import jdk.nashorn.internal.ir.ContinueNode; +import jdk.nashorn.internal.ir.DebuggerNode; import jdk.nashorn.internal.ir.EmptyNode; +import jdk.nashorn.internal.ir.ErrorNode; import jdk.nashorn.internal.ir.Expression; import jdk.nashorn.internal.ir.ExpressionStatement; import jdk.nashorn.internal.ir.ForNode; @@ -826,8 +828,13 @@ } } } catch (final Exception e) { + final int errorLine = line; + final long errorToken = token; //recover parsing recover(e); + final ErrorNode errorExpr = new ErrorNode(errorToken, finish); + final ExpressionStatement expressionStatement = new ExpressionStatement(errorLine, errorToken, finish, errorExpr); + appendStatement(expressionStatement); } // No backtracking from here on. @@ -984,7 +991,7 @@ * Parse a statement block. */ private void block() { - appendStatement(new BlockStatement(line, getBlock(true))); + appendStatement(new BlockStatement(line, getBlock(true), false)); } /** @@ -1339,7 +1346,7 @@ appendStatement(new BlockStatement(startLine, new Block( outer.getToken(), body.getFinish(), - outer.getStatements()))); + outer.getStatements()), true)); } } @@ -1883,7 +1890,7 @@ restoreBlock(outer); } - appendStatement(new BlockStatement(startLine, new Block(tryToken, finish, outer.getFlags(), outer.getStatements()))); + appendStatement(new BlockStatement(startLine, new Block(tryToken, finish, outer.getFlags(), outer.getStatements()), true)); } /** @@ -1901,7 +1908,7 @@ // DEBUGGER tested in caller. next(); endOfLine(); - appendStatement(new ExpressionStatement(debuggerLine, debuggerToken, finish, new RuntimeNode(debuggerToken, finish, RuntimeNode.Request.DEBUGGER, Collections.emptyList()))); + appendStatement(new DebuggerNode(debuggerLine, debuggerToken, finish)); } /**