[JS IR] Support generating JS expression from IrComposite
Except the case when it's empty.
This commit is contained in:
+16
-1
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.isElseBranch
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.Namer
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.emptyScope
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.getJsNameOrKotlinName
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
@@ -20,6 +23,18 @@ import org.jetbrains.kotlin.js.backend.ast.*
|
||||
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
||||
class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsExpression, JsGenerationContext> {
|
||||
|
||||
override fun visitComposite(expression: IrComposite, data: JsGenerationContext): JsExpression {
|
||||
val size = expression.statements.size
|
||||
if (size == 0) TODO("Empty IrComposite is not supported")
|
||||
|
||||
val first = expression.statements[0].accept(this, data)
|
||||
if (size == 1) return first
|
||||
|
||||
return expression.statements.fold(first) { left, right ->
|
||||
JsBinaryOperation(JsBinaryOperator.COMMA, left, right.accept(this, data))
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitVararg(expression: IrVararg, context: JsGenerationContext): JsExpression {
|
||||
assert(expression.elements.none { it is IrSpreadElement })
|
||||
return JsArrayLiteral(expression.elements.map { it.accept(this, context) })
|
||||
|
||||
Reference in New Issue
Block a user