[JS IR] Add descriptive error message for js("...") call

Report a message instead of NPE if `js("...")`` code couldn't be emitted
This commit is contained in:
Roman Artemev
2021-09-27 21:57:43 +03:00
committed by TeamCityServer
parent 920daac0a2
commit 070c64f9b5
2 changed files with 5 additions and 2 deletions
@@ -192,7 +192,9 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsEx
override fun visitCall(expression: IrCall, context: JsGenerationContext): JsExpression {
if (context.checkIfJsCode(expression.symbol)) {
val statements = translateJsCodeIntoStatementList(expression.getValueArgument(0) ?: error("JsCode is expected"))!!
val statements = translateJsCodeIntoStatementList(expression.getValueArgument(0) ?: error("JsCode is expected"))
?: error("Cannot compute js code for ${expression.render()}")
if (statements.isEmpty()) return JsPrefixOperation(JsUnaryOperator.VOID, JsIntLiteral(3)) // TODO: report warning or even error
val lastStatement = statements.last()
@@ -133,7 +133,8 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
override fun visitCall(expression: IrCall, data: JsGenerationContext): JsStatement {
if (data.checkIfJsCode(expression.symbol)) {
val statements = translateJsCodeIntoStatementList(expression.getValueArgument(0) ?: error("JsCode is expected"))!!
val statements = translateJsCodeIntoStatementList(expression.getValueArgument(0) ?: error("JsCode is expected"))
?: error("Cannot compute js code for ${expression.render()}")
return when (statements.size) {
0 -> JsEmpty
1 -> statements.single().withSource(expression, data)