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; > } > >