From e5c45a4e51ca2af0438494310dc625d1871d0d76 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Mon, 8 May 2023 09:53:23 +0200 Subject: [PATCH] [IR] Move extension val `property` into `Utils` for interpreter --- .../org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt | 2 +- .../jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt | 2 +- .../src/org/jetbrains/kotlin/ir/interpreter/Utils.kt | 6 +++++- .../kotlin/ir/interpreter/checker/EvaluationMode.kt | 3 --- .../ir/interpreter/checker/IrInterpreterNameChecker.kt | 7 +++---- .../ir/interpreter/intrinsics/IntrinsicImplementations.kt | 2 +- .../org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt index 4313e245ecd..2ee556577d0 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt @@ -145,7 +145,7 @@ internal class DefaultCallInterceptor(override val interpreter: IrInterpreter) : } private fun calculateBuiltIns(irFunction: IrFunction, args: List) { - val methodName = when (val property = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol) { + val methodName = when (val property = irFunction.property?.symbol) { null -> irFunction.name.asString() else -> property.owner.name.asString() } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt index cc0af17c477..5634e5ebd8a 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt @@ -114,7 +114,7 @@ internal fun createTempClass(name: Name, origin: IrDeclarationOrigin = TEMP_CLAS } internal fun IrFunction.createGetField(): IrExpression { - val backingField = (this as IrSimpleFunction).correspondingPropertySymbol?.owner?.backingField!! + val backingField = this.property!!.backingField!! val receiver = dispatchReceiverParameter ?: extensionReceiverParameter return backingField.createGetField(receiver) } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index 7b55b89faa3..4f7eb8c3bf5 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -219,7 +219,7 @@ internal fun IrFieldAccessExpression.accessesTopLevelOrObjectField(): Boolean { internal fun IrClass.getOriginalPropertyByName(name: String): IrProperty { val property = this.properties.single { it.name.asString() == name } - return (property.getter!!.getLastOverridden() as IrSimpleFunction).correspondingPropertySymbol!!.owner + return property.getter!!.getLastOverridden().property!! } internal fun IrFunctionAccessExpression.getFunctionThatContainsDefaults(): IrFunction { @@ -342,3 +342,7 @@ internal fun IrEnumEntry.toState(irBuiltIns: IrBuiltIns): Common { return enumClassObject } + +internal val IrFunction.property: IrProperty? + get() = (this as? IrSimpleFunction)?.correspondingPropertySymbol?.owner + diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt index 61e559f5f3c..6dac264d170 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt @@ -116,6 +116,3 @@ enum class EvaluationMode { return (this.parent as? IrClass)?.isMarkedWith(annotation) ?: false } } - -private val IrFunction.property: IrProperty? - get() = (this as? IrSimpleFunction)?.correspondingPropertySymbol?.owner diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrInterpreterNameChecker.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrInterpreterNameChecker.kt index 4ba1c92f2aa..d931588662c 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrInterpreterNameChecker.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrInterpreterNameChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCallableReference import org.jetbrains.kotlin.ir.expressions.IrGetEnumValue import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation +import org.jetbrains.kotlin.ir.interpreter.property import org.jetbrains.kotlin.ir.util.isSubclassOf class IrInterpreterNameChecker : IrInterpreterChecker { @@ -35,9 +36,7 @@ class IrInterpreterNameChecker : IrInterpreterChecker { fun IrCall.isKCallableNameCall(irBuiltIns: IrBuiltIns): Boolean { if (this.dispatchReceiver !is IrCallableReference<*>) return false - val directMember = this.symbol.owner.let { - (it as? IrSimpleFunction)?.correspondingPropertySymbol?.owner ?: it - } + val directMember = this.symbol.owner.let { it.property ?: it } val irClass = directMember.parent as? IrClass ?: return false if (!irClass.isSubclassOf(irBuiltIns.kCallableClass.owner)) return false @@ -53,7 +52,7 @@ class IrInterpreterNameChecker : IrInterpreterChecker { private fun IrCall.isEnumName(): Boolean { val owner = this.symbol.owner if (owner.extensionReceiverParameter != null || owner.valueParameters.isNotEmpty()) return false - val property = (owner as? IrSimpleFunction)?.correspondingPropertySymbol?.owner ?: return false + val property = owner.property ?: return false return this.dispatchReceiver is IrGetEnumValue && property.name.asString() == "name" } } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt index a88e4398976..5394e56eee7 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt @@ -171,7 +171,7 @@ internal object EnumIntrinsics : IntrinsicBase() { val enumEntry = callStack.loadState(irFunction.dispatchReceiverParameter!!.symbol) when (irFunction.name.asString()) { "", "" -> { - val symbol = (irFunction as IrSimpleFunction).correspondingPropertySymbol!! + val symbol = irFunction.property!!.symbol callStack.pushState(enumEntry.getField(symbol)!!) } "compareTo" -> { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt index 6d5ff8efa09..01007f5cbff 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Wrapper.kt @@ -64,7 +64,7 @@ internal class Wrapper(val value: Any, override val irClass: IrClass, environmen fun getMethod(irFunction: IrFunction): MethodHandle? { // if function is actually a getter, then use "get${property.name.capitalize()}" as method name - val propertyName = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name?.asString() + val propertyName = irFunction.property?.name?.asString() val propertyCall = listOfNotNull(propertyName, "get${propertyName?.capitalizeAsciiOnly()}") .firstOrNull { receiverClass.methods.any { method -> method.name == it } }