FIR2IR: optimize coerceToUnitIfNeeded in implicit cast inserter
This commit is contained in:
+16
-7
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user