chore: prevent the creation of unused code blocks in IR.

This commit is contained in:
Artem Kobzar
2022-03-21 11:26:13 +00:00
committed by Space
parent 77c04e7d71
commit 6aa8c3aa2a
@@ -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
}
}