Mercurial > hg > icedtea9-forest > nashorn
changeset 386:02588d68399d
8019473: Parser issues related to functions and blocks
Reviewed-by: lagergren
author | sundar |
---|---|
date | Mon, 01 Jul 2013 12:38:01 +0530 |
parents | 218c2833c344 |
children | 10c7a1e9e24f |
files | src/jdk/nashorn/internal/parser/Parser.java test/script/basic/JDK-8019473.js |
diffstat | 2 files changed, 67 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/parser/Parser.java Fri Jun 28 19:36:26 2013 +0530 +++ b/src/jdk/nashorn/internal/parser/Parser.java Mon Jul 01 12:38:01 2013 +0530 @@ -767,8 +767,6 @@ case LBRACE: block(); break; - case RBRACE: - break; case VAR: variableStatement(true); break; @@ -1267,6 +1265,7 @@ case RBRACE: case SEMICOLON: case EOL: + case EOF: break; default: @@ -1314,6 +1313,7 @@ case RBRACE: case SEMICOLON: case EOL: + case EOF: break; default: @@ -1368,6 +1368,7 @@ case RBRACE: case SEMICOLON: case EOL: + case EOF: break; default: @@ -1403,6 +1404,7 @@ case RBRACE: case SEMICOLON: case EOL: + case EOF: break; default: @@ -2566,7 +2568,7 @@ */ // just expression as function body - final Node expr = expression(); + final Node expr = assignmentExpression(true); assert lc.getCurrentBlock() == lc.getFunctionBody(functionNode); // create a return statement - this creates code in itself and does not need to be // wrapped into an ExecuteNode
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/JDK-8019473.js Mon Jul 01 12:38:01 2013 +0530 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010, 2013, 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-8019473: Parser issues related to functions and blocks + * + * @test + * @run + */ + +function checkNoError(code) { + try { + Function(code); + } catch (e) { + print("no error expected for: " + code + " , got " + e); + } +} + +// implicit newlines at EOF should be accepted +checkNoError("for(;;) continue") +checkNoError("return") +checkNoError("yield") +checkNoError("for(;;) break") + +function checkError(code) { + try { + eval(code); + print("SyntaxError expected for: " + code); + } catch (e) { + if (! (e instanceof SyntaxError)) { + fail("SyntaxError expected, got " + e); + } + } +} + +checkError("function f() { case0: }"); +checkError("function f() { if(0) }"); +checkError("function f() { if(0); else }"); +checkError("function f() { while(0) }"); + +// comma expression as closure expression +checkError("function sq(x) x, x*x");