FIR2IR: optimize coerceToUnitIfNeeded in implicit cast inserter

This commit is contained in:
Mikhail Glukhikh
2021-06-03 11:58:08 +03:00
parent 13d91837be
commit 2bf0e6744d
2 changed files with 17 additions and 8 deletions
@@ -21,20 +21,16 @@ import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.makeNotNull
import org.jetbrains.kotlin.ir.types.removeAnnotations
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.classId
import org.jetbrains.kotlin.ir.util.coerceToUnitIfNeeded
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.types.AbstractTypeChecker
class Fir2IrImplicitCastInserter(
private val components: Fir2IrComponents,
private val visitor: Fir2IrVisitor
private val components: Fir2IrComponents
) : Fir2IrComponents by components, FirDefaultVisitor<IrElement, IrElement>() {
private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() }
@@ -333,4 +329,17 @@ class Fir2IrImplicitCastInserter(
original
)
}
private fun IrExpression.coerceToUnitIfNeeded(valueType: IrType, irBuiltIns: IrBuiltIns): IrExpression {
return if (valueType.isUnit() || valueType.isNothing())
this
else
IrTypeOperatorCallImpl(
startOffset, endOffset,
irBuiltIns.unitType,
IrTypeOperator.IMPLICIT_COERCION_TO_UNIT,
irBuiltIns.unitType,
this
)
}
}
@@ -52,7 +52,7 @@ class Fir2IrVisitor(
private val conversionScope: Fir2IrConversionScope
) : Fir2IrComponents by components, FirDefaultVisitor<IrElement, Any?>(), IrGeneratorContextInterface {
internal val implicitCastInserter = Fir2IrImplicitCastInserter(components, this)
internal val implicitCastInserter = Fir2IrImplicitCastInserter(components)
private val memberGenerator = ClassMemberGenerator(components, this, conversionScope)