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)
|
val block = IrBlockImpl(expression.startOffset, expression.endOffset, unitType, expression.origin)
|
||||||
|
|
||||||
// TODO: consider decomposing only when it is really required
|
// 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 condStatements = destructureComposite(cond)
|
||||||
val condValue = condStatements.last() as IrExpression
|
val condValue = condStatements.last() as IrExpression
|
||||||
|
|
||||||
appendBlock.statements += condStatements.run { subList(0, lastIndex) }
|
appendBlock.statements += condStatements.run { subList(0, lastIndex) }
|
||||||
|
|
||||||
JsIrBuilder.buildBlock(unitType).also {
|
JsIrBuilder.buildBlock(unitType).also {
|
||||||
val elseBlock = if (isElseBranch(orig)) null else it
|
val elseBlock = it.takeIf { results.lastIndex != i }
|
||||||
val ifElseNode =
|
val additionalStatements = when {
|
||||||
JsIrBuilder.buildIfElse(orig.startOffset, orig.endOffset, unitType, condValue, res, elseBlock, expression.origin)
|
isElseBranch(orig) -> (res as? IrBlock)?.statements ?: listOf(res)
|
||||||
appendBlock.statements += ifElseNode
|
else -> listOf(
|
||||||
|
JsIrBuilder.buildIfElse(
|
||||||
|
orig.startOffset,
|
||||||
|
orig.endOffset,
|
||||||
|
unitType,
|
||||||
|
condValue,
|
||||||
|
res,
|
||||||
|
elseBlock,
|
||||||
|
expression.origin
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
appendBlock.statements += additionalStatements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user