From 6aa8c3aa2a0a5aa98b1546c69af1e18869a2b16c Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Mon, 21 Mar 2022 11:26:13 +0000 Subject: [PATCH] chore: prevent the creation of unused code blocks in IR. --- .../js/lower/BlockDecomposerLowering.kt | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) 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 } }