diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt index 15079e0f83e..ec3c3e96359 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt @@ -412,17 +412,30 @@ class BlockDecomposerTransformer( val block = IrBlockImpl(expression.startOffset, expression.endOffset, unitType, expression.origin) // TODO: consider decomposing only when it is really required - results.fold(block) { appendBlock, (cond, res, orig) -> + results.foldIndexed(block) { i, appendBlock, (cond, res, orig) -> val condStatements = destructureComposite(cond) val condValue = condStatements.last() as IrExpression appendBlock.statements += condStatements.run { subList(0, lastIndex) } JsIrBuilder.buildBlock(unitType).also { - val elseBlock = if (isElseBranch(orig)) null else it - val ifElseNode = - JsIrBuilder.buildIfElse(orig.startOffset, orig.endOffset, unitType, condValue, res, elseBlock, expression.origin) - appendBlock.statements += ifElseNode + val elseBlock = it.takeIf { results.lastIndex != i } + val additionalStatements = when { + isElseBranch(orig) -> (res as? IrBlock)?.statements ?: listOf(res) + else -> listOf( + JsIrBuilder.buildIfElse( + orig.startOffset, + orig.endOffset, + unitType, + condValue, + res, + elseBlock, + expression.origin + ) + ) + } + + appendBlock.statements += additionalStatements } }