8005703: Offsets miscalculated for blocks

Mon, 07 Jan 2013 14:41:16 -0400

author
jlaskey
date
Mon, 07 Jan 2013 14:41:16 -0400
changeset 9
41c7093477ae
parent 8
1e3f411f47bf
child 10
d14da0d0c577

8005703: Offsets miscalculated for blocks
Reviewed-by: lagergren
Contributed-by: petr.hejl@oracle.com

src/jdk/nashorn/internal/ir/Block.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/parser/AbstractParser.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/parser/Parser.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/jdk/nashorn/internal/ir/Block.java	Mon Jan 07 19:31:36 2013 +0100
     1.2 +++ b/src/jdk/nashorn/internal/ir/Block.java	Mon Jan 07 14:41:16 2013 -0400
     1.3 @@ -185,6 +185,9 @@
     1.4      public void addStatement(final Node statement) {
     1.5          if (statement != null) {
     1.6              statements.add(statement);
     1.7 +            if (getFinish() < statement.getFinish()) {
     1.8 +                setFinish(statement.getFinish());
     1.9 +            }
    1.10          }
    1.11      }
    1.12  
     2.1 --- a/src/jdk/nashorn/internal/parser/AbstractParser.java	Mon Jan 07 19:31:36 2013 +0100
     2.2 +++ b/src/jdk/nashorn/internal/parser/AbstractParser.java	Mon Jan 07 14:41:16 2013 -0400
     2.3 @@ -429,6 +429,8 @@
     2.4  
     2.5          // Create literal node.
     2.6          final Object value = getValue();
     2.7 +        // Advance to have a correct finish
     2.8 +        next();
     2.9  
    2.10          LiteralNode<?> node = null;
    2.11  
    2.12 @@ -452,7 +454,6 @@
    2.13              assert false : "unknown type for LiteralNode: " + value.getClass();
    2.14          }
    2.15  
    2.16 -        next();
    2.17          return node;
    2.18      }
    2.19  }
     3.1 --- a/src/jdk/nashorn/internal/parser/Parser.java	Mon Jan 07 19:31:36 2013 +0100
     3.2 +++ b/src/jdk/nashorn/internal/parser/Parser.java	Mon Jan 07 14:41:16 2013 -0400
     3.3 @@ -938,7 +938,11 @@
     3.4  
     3.5          // If is a statement then handle end of line.
     3.6          if (isStatement) {
     3.7 +            boolean semicolon = type == SEMICOLON;
     3.8              endOfLine();
     3.9 +            if (semicolon) {
    3.10 +                block.setFinish(finish);
    3.11 +            }
    3.12          }
    3.13  
    3.14          return vars;
    3.15 @@ -954,7 +958,8 @@
    3.16       */
    3.17      private void emptyStatement() {
    3.18          if (context._empty_statements) {
    3.19 -            block.addStatement(new EmptyNode(source, token, Token.descPosition(token)));
    3.20 +            block.addStatement(new EmptyNode(source, token,
    3.21 +                    Token.descPosition(token) + Token.descLength(token)));
    3.22          }
    3.23  
    3.24          // SEMICOLON checked in caller.
    3.25 @@ -988,6 +993,7 @@
    3.26  
    3.27          if (executeNode != null) {
    3.28              executeNode.setFinish(finish);
    3.29 +            block.setFinish(finish);
    3.30          }
    3.31      }
    3.32  
    3.33 @@ -1571,6 +1577,7 @@
    3.34                  // Get CASE body.
    3.35                  final Block statements = getBlock(false);
    3.36                  final CaseNode caseNode = new CaseNode(source, caseToken, finish, caseExpression, statements);
    3.37 +                statements.setFinish(finish);
    3.38  
    3.39                  if (caseExpression == null) {
    3.40                      defaultCase = caseNode;

mercurial