[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.Variable
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.isNullableAny
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
import org.jetbrains.kotlin.ir.util.*
internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure {
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
@@ -47,24 +45,15 @@ internal class Common private constructor(override val irClass: IrClass, overrid
}
fun getEqualsFunction(): IrSimpleFunction {
return irClass.functions
.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 }
return irClass.functions.single { it.isEquals() }.target
}
fun getHashCodeFunction(): IrSimpleFunction {
return irClass.functions
.single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction }
return irClass.functions.single { it.isHashCode() }.target
}
fun getToStringFunction(): IrSimpleFunction {
return irClass.functions
.single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction }
return irClass.functions.single { it.isToString() }.target
}
fun createToStringIrCall(): IrCall {