From 274b09cf36eab3242b7a09689cc71916c8cba5c6 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 8 Dec 2020 16:51:16 +0300 Subject: [PATCH] [JS IR] Support generating JS expression from IrComposite Except the case when it's empty. --- .../IrElementToJsExpressionTransformer.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt index 0c3334b390a..3cda932ac69 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt @@ -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 { + 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) })