8156714: Parsing issue with automatic semicolon insertion
Reviewed-by: jlaskey, sundar
--- 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": {