Mercurial > hg > jdk9-shenandoah > nashorn
changeset 1319:bd783ddc4333
8086052: Script evaluation should not return last function declaration
Reviewed-by: sundar, attila
author | hannesw |
---|---|
date | Mon, 15 Jun 2015 15:37:01 +0200 |
parents | 5808c1886a90 |
children | 0e28af5ee013 |
files | samples/javahelp.js src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java test/script/basic/evalreturn.js test/script/basic/evalreturn.js.EXPECTED test/src/jdk/nashorn/api/scripting/test/ScriptObjectMirrorTest.java |
diffstat | 5 files changed, 13 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/samples/javahelp.js Fri Jun 12 16:55:20 2015 +0530 +++ b/samples/javahelp.js Mon Jun 15 15:37:01 2015 +0200 @@ -63,5 +63,3 @@ } } } - -undefined;
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java Fri Jun 12 16:55:20 2015 +0530 +++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java Mon Jun 15 15:37:01 2015 +0200 @@ -584,7 +584,9 @@ @Override public Node leaveVarNode(final VarNode varNode) { addStatement(varNode); - if (varNode.getFlag(VarNode.IS_LAST_FUNCTION_DECLARATION) && lc.getCurrentFunction().isProgram()) { + if (varNode.getFlag(VarNode.IS_LAST_FUNCTION_DECLARATION) + && lc.getCurrentFunction().isProgram() + && ((FunctionNode) varNode.getInit()).isAnonymous()) { new ExpressionStatement(varNode.getLineNumber(), varNode.getToken(), varNode.getFinish(), new IdentNode(varNode.getName())).accept(this); } return varNode;
--- a/test/script/basic/evalreturn.js Fri Jun 12 16:55:20 2015 +0530 +++ b/test/script/basic/evalreturn.js Mon Jun 15 15:37:01 2015 +0200 @@ -59,10 +59,14 @@ print("Scoping OK"); -var f = eval("function cookie() { print('sweet and crunchy!'); } function cake() { print('moist and delicious!'); }"); +// According to the spec, evaluation of function declarations should not return a value, +// but we return values of anonymous function declarations (Nashorn extension). +var e = eval("function cookie() { print('sweet and crunchy!'); } function cake() { print('moist and delicious!'); }"); +print(e); +var f = eval("function cookie() { print('sweet and crunchy!'); } function() { print('moist and delicious!'); }"); print(f); f(); -var g = eval("function cake() { print('moist and delicious!'); } function cookie() { print('sweet and crunchy!'); }"); +var g = eval("function cake() { print('moist and delicious!'); } function() { print('sweet and crunchy!'); }"); print(g); g();
--- a/test/script/basic/evalreturn.js.EXPECTED Fri Jun 12 16:55:20 2015 +0530 +++ b/test/script/basic/evalreturn.js.EXPECTED Mon Jun 15 15:37:01 2015 +0200 @@ -5,7 +5,8 @@ undefined hello Scoping OK -function cake() { print('moist and delicious!'); } +undefined +function() { print('moist and delicious!'); } moist and delicious! -function cookie() { print('sweet and crunchy!'); } +function() { print('sweet and crunchy!'); } sweet and crunchy!
--- a/test/src/jdk/nashorn/api/scripting/test/ScriptObjectMirrorTest.java Fri Jun 12 16:55:20 2015 +0530 +++ b/test/src/jdk/nashorn/api/scripting/test/ScriptObjectMirrorTest.java Mon Jun 15 15:37:01 2015 +0200 @@ -204,7 +204,7 @@ } try { - final Object obj = e.eval("function func() { print('hello'); }"); + final Object obj = e.eval("(function func() { print('hello'); })"); assertEquals(obj.toString(), "function func() { print('hello'); }", "toString returns wrong value"); } catch (final Throwable t) { t.printStackTrace();