FIR2IR: cleanup implicit cast inserter

This commit is contained in:
Mikhail Glukhikh
2020-10-28 13:33:06 +03:00
committed by teamcityserver
parent 2424f2438c
commit 80108444ec
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.coerceToUnit
import org.jetbrains.kotlin.ir.util.coerceToUnitIfNeeded import org.jetbrains.kotlin.ir.util.coerceToUnitIfNeeded
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -91,7 +90,7 @@ class Fir2IrImplicitCastInserter(
// ================================================================================== // ==================================================================================
override fun visitExpression(expression: FirExpression, data: IrElement): IrElement { override fun visitExpression(expression: FirExpression, data: IrElement): IrElement {
return when(expression) { return when (expression) {
is FirBlock -> (data as IrContainerExpression).insertImplicitCasts() is FirBlock -> (data as IrContainerExpression).insertImplicitCasts()
is FirUnitExpression -> (data as IrExpression).let { it.coerceToUnitIfNeeded(it.type, irBuiltIns) } is FirUnitExpression -> (data as IrExpression).let { it.coerceToUnitIfNeeded(it.type, irBuiltIns) }
else -> data else -> data
@@ -120,7 +119,7 @@ class Fir2IrImplicitCastInserter(
} }
val firBranchMap = irWhen.branches.zip(whenExpression.branches).toMap() val firBranchMap = irWhen.branches.zip(whenExpression.branches).toMap()
irWhen.branches.replaceAll { irWhen.branches.replaceAll {
visitWhenBranch(firBranchMap[it]!!, it) visitWhenBranch(firBranchMap.getValue(it), it)
} }
return data return data
} }
@@ -233,9 +232,8 @@ class Fir2IrImplicitCastInserter(
if (irStatement !is IrErrorCallExpression && irStatement is IrExpression) { if (irStatement !is IrErrorCallExpression && irStatement is IrExpression) {
if (i != lastIndex) { if (i != lastIndex) {
statements[i] = irStatement.coerceToUnitIfNeeded(irStatement.type, irBuiltIns) statements[i] = irStatement.coerceToUnitIfNeeded(irStatement.type, irBuiltIns)
} else {
// TODO: for the last statement, need to cast to the return type if mismatched
} }
// TODO: for the last statement, need to cast to the return type if mismatched
} }
} }