-
Sub-task
-
Resolution: Fixed
-
P3
-
9
-
b144
-
generic
-
generic
Unimplemented features crash codegen or result in illegal bytecode.
While ES6 constructs are parsed fine, certain constructs result in codegen crash or illegal bytecode being generated. We should throw proper Error that says something like "this ES6 feature is not implemented".
Example:
File: x.js
var [a, b] = [3, 4];
Output:
Exception in thread "main" java.lang.AssertionError: Failed generating bytecode for x.js:1
at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(jdk.scripting.nashorn@9-internal/CompilationPhase.java:436)
at jdk.nashorn.internal.codegen.CompilationPhase.apply(jdk.scripting.nashorn@9-internal/CompilationPhase.java:630)
at jdk.nashorn.internal.codegen.Compiler.compile(jdk.scripting.nashorn@9-internal/Compiler.java:656)
at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.compileTypeSpecialization(jdk.scripting.nashorn@9-internal/RecompilableScriptFunctionData.java:717)
at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.getBest(jdk.scripting.nashorn@9-internal/RecompilableScriptFunctionData.java:897)
at jdk.nashorn.internal.runtime.ScriptFunctionData.getGeneric(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:401)
at jdk.nashorn.internal.runtime.ScriptFunctionData.createGenericInvoker(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:299)
at jdk.nashorn.internal.runtime.ScriptFunctionData.getGenericInvoker(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:293)
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:637)
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(jdk.scripting.nashorn@9-internal/ScriptFunction.java:513)
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(jdk.scripting.nashorn@9-internal/ScriptRuntime.java:471)
at jdk.nashorn.tools.Shell.apply(jdk.scripting.nashorn@9-internal/Shell.java:519)
at jdk.nashorn.tools.Shell.runScripts(jdk.scripting.nashorn@9-internal/Shell.java:448)
at jdk.nashorn.tools.Shell.run(jdk.scripting.nashorn@9-internal/Shell.java:186)
at jdk.nashorn.tools.jjs.Main.main(jdk.scripting.nashorn.shell@9-internal/Main.java:102)
at jdk.nashorn.tools.jjs.Main.main(jdk.scripting.nashorn.shell@9-internal/Main.java:78)
Caused by: java.lang.AssertionError: Unexpected node [{I%_1}a, {I%_2}b] in store epilogue
at jdk.nashorn.internal.codegen.CodeGenerator$Store$2.enterDefault(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4503)
at jdk.nashorn.internal.ir.visitor.NodeVisitor.enterLiteralNode(jdk.scripting.nashorn@9-internal/NodeVisitor.java:567)
at jdk.nashorn.internal.ir.LiteralNode$ArrayLiteralNode.accept(jdk.scripting.nashorn@9-internal/LiteralNode.java:928)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.LiteralNode$ArrayLiteralNode.accept(jdk.scripting.nashorn@9-internal/LiteralNode.java:923)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.epilogue(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4500)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.store(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4557)
at jdk.nashorn.internal.codegen.CodeGenerator.loadASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3903)
at jdk.nashorn.internal.codegen.CodeGenerator.access$900(jdk.scripting.nashorn@9-internal/CodeGenerator.java:178)
at jdk.nashorn.internal.codegen.CodeGenerator$2.enterASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:925)
at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(jdk.scripting.nashorn@9-internal/NodeOperatorVisitor.java:113)
at jdk.nashorn.internal.ir.BinaryNode.accept(jdk.scripting.nashorn@9-internal/BinaryNode.java:335)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:863)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:839)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpressionAsType(jdk.scripting.nashorn@9-internal/CodeGenerator.java:835)
at jdk.nashorn.internal.codegen.CodeGenerator$16.evaluate(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3901)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.store(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4555)
at jdk.nashorn.internal.codegen.CodeGenerator.loadASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3903)
at jdk.nashorn.internal.codegen.CodeGenerator.access$900(jdk.scripting.nashorn@9-internal/CodeGenerator.java:178)
at jdk.nashorn.internal.codegen.CodeGenerator$2.enterASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:925)
at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(jdk.scripting.nashorn@9-internal/NodeOperatorVisitor.java:113)
at jdk.nashorn.internal.ir.BinaryNode.accept(jdk.scripting.nashorn@9-internal/BinaryNode.java:335)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:863)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:839)
at jdk.nashorn.internal.codegen.CodeGenerator.loadAndDiscard(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3694)
at jdk.nashorn.internal.codegen.CodeGenerator.enterExpressionStatement(jdk.scripting.nashorn@9-internal/CodeGenerator.java:1732)
at jdk.nashorn.internal.ir.ExpressionStatement.accept(jdk.scripting.nashorn@9-internal/ExpressionStatement.java:63)
at jdk.nashorn.internal.ir.Node.accept(jdk.scripting.nashorn@9-internal/Node.java:286)
at jdk.nashorn.internal.ir.Block.accept(jdk.scripting.nashorn@9-internal/Block.java:229)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.Block.accept(jdk.scripting.nashorn@9-internal/Block.java:505)
at jdk.nashorn.internal.ir.FunctionNode.accept(jdk.scripting.nashorn@9-internal/FunctionNode.java:394)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.LexicalContextExpression.accept(jdk.scripting.nashorn@9-internal/LexicalContextExpression.java:47)
at jdk.nashorn.internal.ir.FunctionNode.accept(jdk.scripting.nashorn@9-internal/FunctionNode.java:56)
at jdk.nashorn.internal.codegen.CompilationPhase.transformFunction(jdk.scripting.nashorn@9-internal/CompilationPhase.java:634)
at jdk.nashorn.internal.codegen.CompilationPhase.access$100(jdk.scripting.nashorn@9-internal/CompilationPhase.java:55)
at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(jdk.scripting.nashorn@9-internal/CompilationPhase.java:423)
... 15 more
While ES6 constructs are parsed fine, certain constructs result in codegen crash or illegal bytecode being generated. We should throw proper Error that says something like "this ES6 feature is not implemented".
Example:
File: x.js
var [a, b] = [3, 4];
Output:
Exception in thread "main" java.lang.AssertionError: Failed generating bytecode for x.js:1
at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(jdk.scripting.nashorn@9-internal/CompilationPhase.java:436)
at jdk.nashorn.internal.codegen.CompilationPhase.apply(jdk.scripting.nashorn@9-internal/CompilationPhase.java:630)
at jdk.nashorn.internal.codegen.Compiler.compile(jdk.scripting.nashorn@9-internal/Compiler.java:656)
at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.compileTypeSpecialization(jdk.scripting.nashorn@9-internal/RecompilableScriptFunctionData.java:717)
at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.getBest(jdk.scripting.nashorn@9-internal/RecompilableScriptFunctionData.java:897)
at jdk.nashorn.internal.runtime.ScriptFunctionData.getGeneric(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:401)
at jdk.nashorn.internal.runtime.ScriptFunctionData.createGenericInvoker(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:299)
at jdk.nashorn.internal.runtime.ScriptFunctionData.getGenericInvoker(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:293)
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:637)
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(jdk.scripting.nashorn@9-internal/ScriptFunction.java:513)
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(jdk.scripting.nashorn@9-internal/ScriptRuntime.java:471)
at jdk.nashorn.tools.Shell.apply(jdk.scripting.nashorn@9-internal/Shell.java:519)
at jdk.nashorn.tools.Shell.runScripts(jdk.scripting.nashorn@9-internal/Shell.java:448)
at jdk.nashorn.tools.Shell.run(jdk.scripting.nashorn@9-internal/Shell.java:186)
at jdk.nashorn.tools.jjs.Main.main(jdk.scripting.nashorn.shell@9-internal/Main.java:102)
at jdk.nashorn.tools.jjs.Main.main(jdk.scripting.nashorn.shell@9-internal/Main.java:78)
Caused by: java.lang.AssertionError: Unexpected node [{I%_1}a, {I%_2}b] in store epilogue
at jdk.nashorn.internal.codegen.CodeGenerator$Store$2.enterDefault(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4503)
at jdk.nashorn.internal.ir.visitor.NodeVisitor.enterLiteralNode(jdk.scripting.nashorn@9-internal/NodeVisitor.java:567)
at jdk.nashorn.internal.ir.LiteralNode$ArrayLiteralNode.accept(jdk.scripting.nashorn@9-internal/LiteralNode.java:928)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.LiteralNode$ArrayLiteralNode.accept(jdk.scripting.nashorn@9-internal/LiteralNode.java:923)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.epilogue(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4500)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.store(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4557)
at jdk.nashorn.internal.codegen.CodeGenerator.loadASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3903)
at jdk.nashorn.internal.codegen.CodeGenerator.access$900(jdk.scripting.nashorn@9-internal/CodeGenerator.java:178)
at jdk.nashorn.internal.codegen.CodeGenerator$2.enterASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:925)
at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(jdk.scripting.nashorn@9-internal/NodeOperatorVisitor.java:113)
at jdk.nashorn.internal.ir.BinaryNode.accept(jdk.scripting.nashorn@9-internal/BinaryNode.java:335)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:863)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:839)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpressionAsType(jdk.scripting.nashorn@9-internal/CodeGenerator.java:835)
at jdk.nashorn.internal.codegen.CodeGenerator$16.evaluate(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3901)
at jdk.nashorn.internal.codegen.CodeGenerator$Store.store(jdk.scripting.nashorn@9-internal/CodeGenerator.java:4555)
at jdk.nashorn.internal.codegen.CodeGenerator.loadASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3903)
at jdk.nashorn.internal.codegen.CodeGenerator.access$900(jdk.scripting.nashorn@9-internal/CodeGenerator.java:178)
at jdk.nashorn.internal.codegen.CodeGenerator$2.enterASSIGN(jdk.scripting.nashorn@9-internal/CodeGenerator.java:925)
at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(jdk.scripting.nashorn@9-internal/NodeOperatorVisitor.java:113)
at jdk.nashorn.internal.ir.BinaryNode.accept(jdk.scripting.nashorn@9-internal/BinaryNode.java:335)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:863)
at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(jdk.scripting.nashorn@9-internal/CodeGenerator.java:839)
at jdk.nashorn.internal.codegen.CodeGenerator.loadAndDiscard(jdk.scripting.nashorn@9-internal/CodeGenerator.java:3694)
at jdk.nashorn.internal.codegen.CodeGenerator.enterExpressionStatement(jdk.scripting.nashorn@9-internal/CodeGenerator.java:1732)
at jdk.nashorn.internal.ir.ExpressionStatement.accept(jdk.scripting.nashorn@9-internal/ExpressionStatement.java:63)
at jdk.nashorn.internal.ir.Node.accept(jdk.scripting.nashorn@9-internal/Node.java:286)
at jdk.nashorn.internal.ir.Block.accept(jdk.scripting.nashorn@9-internal/Block.java:229)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.Block.accept(jdk.scripting.nashorn@9-internal/Block.java:505)
at jdk.nashorn.internal.ir.FunctionNode.accept(jdk.scripting.nashorn@9-internal/FunctionNode.java:394)
at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(jdk.scripting.nashorn@9-internal/LexicalContextNode.java:57)
at jdk.nashorn.internal.ir.LexicalContextExpression.accept(jdk.scripting.nashorn@9-internal/LexicalContextExpression.java:47)
at jdk.nashorn.internal.ir.FunctionNode.accept(jdk.scripting.nashorn@9-internal/FunctionNode.java:56)
at jdk.nashorn.internal.codegen.CompilationPhase.transformFunction(jdk.scripting.nashorn@9-internal/CompilationPhase.java:634)
at jdk.nashorn.internal.codegen.CompilationPhase.access$100(jdk.scripting.nashorn@9-internal/CompilationPhase.java:55)
at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(jdk.scripting.nashorn@9-internal/CompilationPhase.java:423)
... 15 more