[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.backend.common.ir.isElseBranch
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
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.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
@@ -20,6 +23,18 @@ import org.jetbrains.kotlin.js.backend.ast.*
|
|||||||
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
||||||
class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsExpression, JsGenerationContext> {
|
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 {
|
override fun visitVararg(expression: IrVararg, context: JsGenerationContext): JsExpression {
|
||||||
assert(expression.elements.none { it is IrSpreadElement })
|
assert(expression.elements.none { it is IrSpreadElement })
|
||||||
return JsArrayLiteral(expression.elements.map { it.accept(this, context) })
|
return JsArrayLiteral(expression.elements.map { it.accept(this, context) })
|
||||||
|
|||||||
Reference in New Issue
Block a user