[IR] Reuse IR utils functions to find methods of Any in interpreter

This commit is contained in:
Ivan Kylchik
2023-07-24 12:35:50 +02:00
committed by Space Team
parent 1eca5d1a3b
commit a56b462eb6
@@ -13,9 +13,7 @@ import org.jetbrains.kotlin.ir.interpreter.stack.Field
import org.jetbrains.kotlin.ir.interpreter.stack.Fields import org.jetbrains.kotlin.ir.interpreter.stack.Fields
import org.jetbrains.kotlin.ir.interpreter.stack.Variable import org.jetbrains.kotlin.ir.interpreter.stack.Variable
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.isNullableAny import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure { internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure {
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf() override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
@@ -47,24 +45,15 @@ internal class Common private constructor(override val irClass: IrClass, overrid
} }
fun getEqualsFunction(): IrSimpleFunction { fun getEqualsFunction(): IrSimpleFunction {
return irClass.functions return irClass.functions.single { it.isEquals() }.target
.single {
it.name.asString() == "equals" && it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null
&& it.valueParameters.size == 1 && it.valueParameters[0].type.isNullableAny()
}
.let { it.resolveFakeOverride() as IrSimpleFunction }
} }
fun getHashCodeFunction(): IrSimpleFunction { fun getHashCodeFunction(): IrSimpleFunction {
return irClass.functions return irClass.functions.single { it.isHashCode() }.target
.single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction }
} }
fun getToStringFunction(): IrSimpleFunction { fun getToStringFunction(): IrSimpleFunction {
return irClass.functions return irClass.functions.single { it.isToString() }.target
.single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction }
} }
fun createToStringIrCall(): IrCall { fun createToStringIrCall(): IrCall {