[IR] Slightly simplify string concatenation folding

#KT-58923
This commit is contained in:
Ivan Kylchik
2023-05-29 14:13:33 +02:00
committed by Space Team
parent dd264cff50
commit a6a389933d
@@ -115,25 +115,22 @@ internal abstract class IrConstExpressionTransformer(
folded += next folded += next
buildersList.add(StringBuilder(next.getConstStringOrEmpty())) buildersList.add(StringBuilder(next.getConstStringOrEmpty()))
} else { } else {
buildersList.last().append(nextAsConst.value.toString())
folded[folded.size - 1] = IrConstImpl.string( folded[folded.size - 1] = IrConstImpl.string(
// Inlined strings may have `last.startOffset > next.endOffset` // Inlined strings may have `last.startOffset > next.endOffset`
min(last.startOffset, next.startOffset), max(last.endOffset, next.endOffset), expression.type, "" min(last.startOffset, next.startOffset), max(last.endOffset, next.endOffset),
expression.type, buildersList.last().toString()
) )
buildersList.last().append(nextAsConst.value.toString())
} }
} }
} }
} }
val foldedConst = folded.singleOrNull() as? IrConst<*> val foldedConst = folded.singleOrNull() as? IrConst<*>
if (foldedConst != null) { if (foldedConst != null && foldedConst.value is String) {
return IrConstImpl.string(expression.startOffset, expression.endOffset, expression.type, buildersList.single().toString()) return IrConstImpl.string(expression.startOffset, expression.endOffset, expression.type, buildersList.single().toString())
} }
folded.zip(buildersList).forEach {
@Suppress("UNCHECKED_CAST")
(it.first as? IrConst<String>)?.value = it.second.toString()
}
return IrStringConcatenationImpl(expression.startOffset, expression.endOffset, expression.type, folded) return IrStringConcatenationImpl(expression.startOffset, expression.endOffset, expression.type, folded)
} }
} }