chore: prevent the creation of unused code blocks in IR.
This commit is contained in:
+18
-5
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user