8156714: Parsing issue with automatic semicolon insertion
authorhannesw
Fri, 13 May 2016 18:38:15 +0200
changeset 37924 a78497edf9fb
parent 37923 be223c7da1b8
child 37925 3560b89fb532
8156714: Parsing issue with automatic semicolon insertion Reviewed-by: jlaskey, sundar
nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/AbstractParser.java
nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java
nashorn/test/script/basic/JDK-8156714.js
nashorn/test/script/nosecurity/parserapi.js.EXPECTED
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/AbstractParser.java	Fri May 13 14:30:54 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/AbstractParser.java	Fri May 13 18:38:15 2016 +0200
@@ -203,8 +203,10 @@
      * @return tokenType of next token.
      */
     private TokenType nextToken() {
-        // Capture last token tokenType.
-        last = type;
+        // Capture last token type, but ignore comments (which are irrelevant for the purpose of newline detection).
+        if (type != COMMENT) {
+            last = type;
+        }
         if (type != EOF) {
 
             // Set up next token.
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java	Fri May 13 14:30:54 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java	Fri May 13 18:38:15 2016 +0200
@@ -1827,7 +1827,7 @@
 
     /**
      * ExpressionStatement :
-     *      Expression ; // [lookahead ~( or  function )]
+     *      Expression ; // [lookahead ~({ or  function )]
      *
      * See 12.4
      *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8156714.js	Fri May 13 18:38:15 2016 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ * 
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ * 
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ * 
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8156714: Parsing issue with automatic semicolon insertion
+ *
+ * @test
+ * @run
+ */
+
+a = function() {
+}
+
+/* */ function b() {
+}
+
+c = function() {
+} /*
+
+*/ function d() {
+}
+
+try {
+    eval("x = function() {} /* */ function y() {}");
+    throw new Error("Error expected");
+} catch (e) {
+    if (!(e instanceof SyntaxError)) {
+        throw new Error("Unexpected error: " + e);
+    }
+}
--- a/nashorn/test/script/nosecurity/parserapi.js.EXPECTED	Fri May 13 14:30:54 2016 +0200
+++ b/nashorn/test/script/nosecurity/parserapi.js.EXPECTED	Fri May 13 18:38:15 2016 +0200
@@ -4864,7 +4864,7 @@
   "kind": "COMPILATION_UNIT",
   "sourceElements": [
     {
-      "endPosition": "1242",
+      "endPosition": "1222",
       "kind": "FUNCTION",
       "name": "Parser",
       "body": {
@@ -5419,7 +5419,7 @@
         },
         "startPosition": "1809"
       },
-      "endPosition": "1973",
+      "endPosition": "1901",
       "kind": "EXPRESSION_STATEMENT",
       "startPosition": "1809"
     },
@@ -6310,7 +6310,7 @@
       "startPosition": "1974"
     },
     {
-      "endPosition": "3767",
+      "endPosition": "3726",
       "kind": "FUNCTION",
       "name": "processFiles",
       "body": {