Bug in extractVarNodesFromDeadCode. Variable "x" has already been declared
Jim Laskey
james.laskey at oracle.com
Mon Oct 28 15:47:14 UTC 2019
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.laskey at 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 <mitrofanov at 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;
>> }
>>
>>
>
More information about the nashorn-dev
mailing list