Mercurial > people > rkennke > jdk9-shenandoah-final > nashorn
changeset 8:41c7093477ae
8005703: Offsets miscalculated for blocks
Reviewed-by: lagergren
Contributed-by: petr.hejl@oracle.com
author | jlaskey |
---|---|
date | Mon, 07 Jan 2013 14:41:16 -0400 |
parents | 1e3f411f47bf |
children | d14da0d0c577 |
files | src/jdk/nashorn/internal/ir/Block.java src/jdk/nashorn/internal/parser/AbstractParser.java src/jdk/nashorn/internal/parser/Parser.java |
diffstat | 3 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/ir/Block.java Mon Jan 07 19:31:36 2013 +0100 +++ b/src/jdk/nashorn/internal/ir/Block.java Mon Jan 07 14:41:16 2013 -0400 @@ -185,6 +185,9 @@ public void addStatement(final Node statement) { if (statement != null) { statements.add(statement); + if (getFinish() < statement.getFinish()) { + setFinish(statement.getFinish()); + } } }
--- a/src/jdk/nashorn/internal/parser/AbstractParser.java Mon Jan 07 19:31:36 2013 +0100 +++ b/src/jdk/nashorn/internal/parser/AbstractParser.java Mon Jan 07 14:41:16 2013 -0400 @@ -429,6 +429,8 @@ // Create literal node. final Object value = getValue(); + // Advance to have a correct finish + next(); LiteralNode<?> node = null; @@ -452,7 +454,6 @@ assert false : "unknown type for LiteralNode: " + value.getClass(); } - next(); return node; } }
--- a/src/jdk/nashorn/internal/parser/Parser.java Mon Jan 07 19:31:36 2013 +0100 +++ b/src/jdk/nashorn/internal/parser/Parser.java Mon Jan 07 14:41:16 2013 -0400 @@ -938,7 +938,11 @@ // If is a statement then handle end of line. if (isStatement) { + boolean semicolon = type == SEMICOLON; endOfLine(); + if (semicolon) { + block.setFinish(finish); + } } return vars; @@ -954,7 +958,8 @@ */ private void emptyStatement() { if (context._empty_statements) { - block.addStatement(new EmptyNode(source, token, Token.descPosition(token))); + block.addStatement(new EmptyNode(source, token, + Token.descPosition(token) + Token.descLength(token))); } // SEMICOLON checked in caller. @@ -988,6 +993,7 @@ if (executeNode != null) { executeNode.setFinish(finish); + block.setFinish(finish); } } @@ -1571,6 +1577,7 @@ // Get CASE body. final Block statements = getBlock(false); final CaseNode caseNode = new CaseNode(source, caseToken, finish, caseExpression, statements); + statements.setFinish(finish); if (caseExpression == null) { defaultCase = caseNode;