diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 25d30a4da9c..65e5350ceec 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -957,9 +957,6 @@ class ExpressionCodegen( return classReference.onStack } - private fun resolveToCallable(irCall: IrFunctionAccessExpression, isSuper: Boolean): IrCallableMethod = - methodSignatureMapper.mapToCallableMethod(irCall, isSuper) - private fun getOrCreateCallGenerator(element: IrFunctionAccessExpression, data: BlockInfo): IrCallGenerator { if (!element.symbol.owner.isInlineFunctionCall(context) || classCodegen.irClass.fileParent.fileEntry is MultifileFacadeFileEntry diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayIterator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayIterator.kt index 1fca3d8bccd..3ea8e81fc0c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayIterator.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayIterator.kt @@ -17,8 +17,10 @@ package org.jetbrains.kotlin.backend.jvm.intrinsics import org.jetbrains.kotlin.backend.jvm.JvmBackendContext +import org.jetbrains.kotlin.backend.jvm.codegen.mapClass import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression +import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature object ArrayIterator : IntrinsicMethod() { @@ -27,11 +29,11 @@ object ArrayIterator : IntrinsicMethod() { signature: JvmMethodSignature, context: JvmBackendContext ): IrIntrinsicFunction { - val method = context.methodSignatureMapper.mapToCallableMethod(expression, false) - return IrIntrinsicFunction.create(expression, signature, context, method.owner) { - val methodSignature = "(${method.owner.descriptor})${method.asmMethod.returnType.descriptor}" + val owner = context.typeMapper.mapClass(expression.symbol.owner.parentAsClass) + return IrIntrinsicFunction.create(expression, signature, context, owner) { + val methodSignature = "(${owner.descriptor})${signature.returnType.descriptor}" val intrinsicOwner = - if (AsmUtil.isPrimitive(method.owner.elementType)) + if (AsmUtil.isPrimitive(owner.elementType)) "kotlin/jvm/internal/ArrayIteratorsKt" else "kotlin/jvm/internal/ArrayIteratorKt" diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicFunction.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicFunction.kt index 89c8d314afa..6648cadf4e3 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicFunction.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicFunction.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm.intrinsics import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.codegen.BlockInfo import org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen +import org.jetbrains.kotlin.backend.jvm.codegen.mapClass import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.Callable import org.jetbrains.kotlin.codegen.StackValue @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.isVararg +import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.substitute import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature import org.jetbrains.kotlin.types.KotlinType @@ -138,10 +140,13 @@ open class IrIntrinsicFunction( } fun IrFunctionAccessExpression.argTypes(context: JvmBackendContext): ArrayList { - val callableMethod = context.methodSignatureMapper.mapToCallableMethod(this, false) + val callee = symbol.owner + val signature = context.methodSignatureMapper.mapSignatureSkipGeneric(callee) return arrayListOf().apply { - callableMethod.dispatchReceiverType?.let { add(it) } - addAll(callableMethod.asmMethod.argumentTypes) + if (dispatchReceiver != null) { + add(context.typeMapper.mapClass(callee.parentAsClass)) + } + addAll(signature.asmMethod.argumentTypes) } }