From cb43f3c8054f65c1911d3c923df4cdbfc76eb60b Mon Sep 17 00:00:00 2001 From: "vladislav.grechko" Date: Thu, 27 Jul 2023 18:27:24 +0200 Subject: [PATCH] Fix `Symbols::isTypeOfIntrinsic` implementation Function did not work as expected for JVM backend --- .../src/org/jetbrains/kotlin/backend/common/ir/Ir.kt | 8 ++++---- .../ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index a0f0e1ae29a..54451f5b379 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.builtins.PrimitiveType import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.StandardNames.KOTLIN_REFLECT_FQ_NAME import org.jetbrains.kotlin.ir.IrBuiltIns -import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol @@ -253,9 +252,10 @@ abstract class Symbols( fun isTypeOfIntrinsic(symbol: IrFunctionSymbol): Boolean = symbol is IrSimpleFunctionSymbol && symbol.owner.let { function -> - function.name.asString() == "typeOf" && - function.valueParameters.isEmpty() && - (function.parent as? IrPackageFragment)?.packageFqName == KOTLIN_REFLECT_FQ_NAME + function.isTopLevelInPackage("typeOf", KOTLIN_REFLECT_FQ_NAME) + && function.valueParameters.isEmpty() + && function.dispatchReceiverParameter == null + && function.extensionReceiverParameter == null } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index b591cf8bdf3..83fdef8bc59 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -1617,3 +1617,6 @@ val IrDeclaration.isExpect fun IrElement.sourceElement(): AbstractKtSourceElement? = if (startOffset >= 0) KtOffsetsOnlySourceElement(this.startOffset, this.endOffset) else null + +fun IrFunction.isTopLevelInPackage(name: String, packageFqName: FqName) = + this.name.asString() == name && parent.kotlinFqName == packageFqName \ No newline at end of file