Obviously, this wasn't intended for the list. To clarify, since Nashorn is being deprecated, we are taking input such as this and recording it as a bug in case someone adopts Nashorn in future.
Cheers, -- Jim > On Oct 28, 2019, at 12:36 PM, Jim Laskey <james.las...@oracle.com> wrote: > > You want to take this on? File a bug and put the e-mail (change set) in it, > then tell the user Nashorn is deprecated. > >> On Oct 28, 2019, at 12:21 PM, Anton Mitrofanov <mitrofa...@krista.ru> wrote: >> >> Hi. >> >> We have encountered another bug in Nashorn. It can be reproduced by >> evaluation of this script with "jjs --language=es6": >> >> if (true) { throw "test"; } { let x = "1"; } { let x = 2; } >> >> It results in compilation error: >> >> ECMAScript Exception: SyntaxError: <shell>:1:34 Variable "x" has already >> been declared if (true) { throw "test"; } { let x = "1"; } { let x = 2; } >> ^ >> While expected out was to get runtime exception "test". >> >> Looks like the problem is in dead code elimination logic of >> FoldConstants.extractVarNodesFromDeadCode function. >> >> And here is the patch to fix it: >> >> diff -r 6e287efa5fa3 >> src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/FoldConstants.java >> --- >> a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/FoldConstants.java >> Wed Oct 23 09:53:07 2019 +0200 >> +++ >> b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/FoldConstants.java >> Wed Oct 23 14:23:48 2019 +0300 >> @@ -195,7 +195,9 @@ >> deadCodeRoot.accept(new SimpleNodeVisitor() { >> @Override >> public boolean enterVarNode(final VarNode varNode) { >> - statements.add(varNode.setInit(null)); >> + if (!varNode.isBlockScoped()) { >> + statements.add(varNode.setInit(null)); >> + } >> return false; >> } >> >> >