IR: remove .toKotlinType() usage from coerceToUnit calls in lowerings
This commit is contained in:
+21
-10
@@ -37,10 +37,8 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
|
||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||
import org.jetbrains.kotlin.ir.util.coerceToUnit
|
||||
import org.jetbrains.kotlin.ir.util.render
|
||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
@@ -175,7 +173,7 @@ internal class InsertImplicitCasts(
|
||||
body.transformPostfix {
|
||||
statements.forEachIndexed { i, irStatement ->
|
||||
if (irStatement is IrExpression) {
|
||||
body.statements[i] = irStatement.coerceToUnit(irBuiltIns)
|
||||
body.statements[i] = irStatement.coerceToUnit()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -191,7 +189,7 @@ internal class InsertImplicitCasts(
|
||||
if (i == lastIndex)
|
||||
irStatement.cast(type)
|
||||
else
|
||||
irStatement.coerceToUnit(irBuiltIns)
|
||||
irStatement.coerceToUnit()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -199,7 +197,7 @@ internal class InsertImplicitCasts(
|
||||
override fun visitReturn(expression: IrReturn): IrExpression =
|
||||
expression.transformPostfix {
|
||||
value = if (expression.returnTargetSymbol is IrConstructorSymbol) {
|
||||
value.coerceToUnit(irBuiltIns)
|
||||
value.coerceToUnit()
|
||||
} else {
|
||||
val returnTargetDescriptor = expression.returnTargetSymbol.descriptor
|
||||
val isLambdaReturnValue = returnTargetDescriptor is AnonymousFunctionDescriptor
|
||||
@@ -262,7 +260,7 @@ internal class InsertImplicitCasts(
|
||||
override fun visitLoop(loop: IrLoop): IrExpression =
|
||||
loop.transformPostfix {
|
||||
condition = condition.cast(builtIns.booleanType)
|
||||
body = body?.coerceToUnit(irBuiltIns)
|
||||
body = body?.coerceToUnit()
|
||||
}
|
||||
|
||||
override fun visitThrow(expression: IrThrow): IrExpression =
|
||||
@@ -278,7 +276,7 @@ internal class InsertImplicitCasts(
|
||||
aCatch.result = aCatch.result.cast(type)
|
||||
}
|
||||
|
||||
finallyExpression = finallyExpression?.coerceToUnit(irBuiltIns)
|
||||
finallyExpression = finallyExpression?.coerceToUnit()
|
||||
}
|
||||
|
||||
override fun visitTypeOperator(expression: IrTypeOperatorCall): IrExpression =
|
||||
@@ -347,7 +345,7 @@ internal class InsertImplicitCasts(
|
||||
|
||||
return when {
|
||||
expectedType.isUnit() ->
|
||||
coerceToUnit(irBuiltIns)
|
||||
coerceToUnit()
|
||||
|
||||
valueType.isDynamic() && !expectedType.isDynamic() ->
|
||||
if (expectedType.isNullableAny())
|
||||
@@ -478,4 +476,17 @@ internal class InsertImplicitCasts(
|
||||
KotlinBuiltIns.isUShort(this) ||
|
||||
KotlinBuiltIns.isUInt(this) ||
|
||||
KotlinBuiltIns.isULong(this)
|
||||
|
||||
private fun IrExpression.coerceToUnit(): IrExpression {
|
||||
return if (KotlinTypeChecker.DEFAULT.isSubtypeOf(type.toKotlinType(), irBuiltIns.unitType.toKotlinType()))
|
||||
this
|
||||
else
|
||||
IrTypeOperatorCallImpl(
|
||||
startOffset, endOffset,
|
||||
irBuiltIns.unitType,
|
||||
IrTypeOperator.IMPLICIT_COERCION_TO_UNIT,
|
||||
irBuiltIns.unitType,
|
||||
this
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.utils.DFS
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
@@ -156,23 +154,8 @@ fun IrExpression.isFalseConst() = this is IrConst<*> && this.kind == IrConstKind
|
||||
|
||||
fun IrExpression.isIntegerConst(value: Int) = this is IrConst<*> && this.kind == IrConstKind.Int && this.value == value
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
fun IrExpression.coerceToUnit(builtins: IrBuiltIns): IrExpression {
|
||||
return coerceToUnitIfNeeded(type.toKotlinType(), builtins)
|
||||
}
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
fun IrExpression.coerceToUnitIfNeeded(valueType: KotlinType, irBuiltIns: IrBuiltIns): IrExpression {
|
||||
return if (KotlinTypeChecker.DEFAULT.isSubtypeOf(valueType, irBuiltIns.unitType.toKotlinType()))
|
||||
this
|
||||
else
|
||||
IrTypeOperatorCallImpl(
|
||||
startOffset, endOffset,
|
||||
irBuiltIns.unitType,
|
||||
IrTypeOperator.IMPLICIT_COERCION_TO_UNIT,
|
||||
irBuiltIns.unitType,
|
||||
this
|
||||
)
|
||||
return coerceToUnitIfNeeded(type, builtins)
|
||||
}
|
||||
|
||||
fun IrExpression.coerceToUnitIfNeeded(valueType: IrType, irBuiltIns: IrBuiltIns): IrExpression {
|
||||
|
||||
Reference in New Issue
Block a user