-
Bug
-
Resolution: Fixed
-
P4
-
9, 10
-
b01
-
generic
-
generic
FULL PRODUCT VERSION :
java version "10-ea" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10-ea+39)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10-ea+39, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.3.9600]
A DESCRIPTION OF THE PROBLEM :
According to ecma-262 the Class Definition for a ClassExpression specifially states that the BindingIdentifier is optional. An example for valid ES6 code:
(class {});
It seems the sequence that occurs once the nashorn Parser has started parsing results in a jdk.nashorn.internal.ir.ClassNode that has a null value for it's private variable IdentNode ident.
However, the code in jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl in the constructor assumes a non-null jdk.nashorn.internal.ir.IdentNode is always supplied as an argument. Consequently and incorrectly a NullPointerException is thrown.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and execute the provided sourcecode.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No output.
ACTUAL -
A thrown NullPointerException.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl.<init>(IdentifierTreeImpl.java:37)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateIdent(IRTranslator.java:601)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterClassNode(IRTranslator.java:478)
at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ClassNode.accept(ClassNode.java:131)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateExpr(IRTranslator.java:584)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterExpressionStatement(IRTranslator.java:200)
at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ExpressionStatement.accept(ExpressionStatement.java:81)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateStats(IRTranslator.java:539)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translate(IRTranslator.java:99)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.translate(ParserImpl.java:224)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.parse(ParserImpl.java:126)
at Main.main(Main.java:9)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import jdk.nashorn.api.tree.CompilationUnitTree;
import jdk.nashorn.api.tree.Parser;
public class Main {
public static void main(String[] args) {
Parser p = jdk.nashorn.api.tree.Parser.create("--language=es6");
CompilationUnitTree tree = p.parse("test.js", "(class {});", System.out::println);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
No workaround found.
java version "10-ea" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10-ea+39)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10-ea+39, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.3.9600]
A DESCRIPTION OF THE PROBLEM :
According to ecma-262 the Class Definition for a ClassExpression specifially states that the BindingIdentifier is optional. An example for valid ES6 code:
(class {});
It seems the sequence that occurs once the nashorn Parser has started parsing results in a jdk.nashorn.internal.ir.ClassNode that has a null value for it's private variable IdentNode ident.
However, the code in jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl in the constructor assumes a non-null jdk.nashorn.internal.ir.IdentNode is always supplied as an argument. Consequently and incorrectly a NullPointerException is thrown.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and execute the provided sourcecode.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No output.
ACTUAL -
A thrown NullPointerException.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl.<init>(IdentifierTreeImpl.java:37)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateIdent(IRTranslator.java:601)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterClassNode(IRTranslator.java:478)
at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ClassNode.accept(ClassNode.java:131)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateExpr(IRTranslator.java:584)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterExpressionStatement(IRTranslator.java:200)
at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ExpressionStatement.accept(ExpressionStatement.java:81)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateStats(IRTranslator.java:539)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translate(IRTranslator.java:99)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.translate(ParserImpl.java:224)
at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.parse(ParserImpl.java:126)
at Main.main(Main.java:9)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import jdk.nashorn.api.tree.CompilationUnitTree;
import jdk.nashorn.api.tree.Parser;
public class Main {
public static void main(String[] args) {
Parser p = jdk.nashorn.api.tree.Parser.create("--language=es6");
CompilationUnitTree tree = p.parse("test.js", "(class {});", System.out::println);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
No workaround found.