From 6c1c86abafb1e6988e49dcf2e1f02a685236d099 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 3 Apr 2017 17:21:27 +0300 Subject: [PATCH] Fixed dispatch receiver during copying of function descriptor --- .../backend/common/DeepCopyIrTreeWithDescriptoros.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt index 448c8117a9f..ecd7f63c856 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt @@ -77,6 +77,7 @@ internal class DeepCopyIrTreeWithDescriptors(val targetFunction: IrFunction, val val oldDescriptor = declaration.descriptor val newDescriptor = copyClassDescriptor(oldDescriptor) descriptorSubstituteMap[oldDescriptor] = newDescriptor + descriptorSubstituteMap[oldDescriptor.thisAsReceiverParameter] = newDescriptor.thisAsReceiverParameter super.visitClass(declaration) val constructors = oldDescriptor.constructors.map { @@ -158,13 +159,16 @@ internal class DeepCopyIrTreeWithDescriptors(val targetFunction: IrFunction, val oldDescriptor.source ).apply { isTailrec = oldDescriptor.isTailrec } - val newDispatchReceiverParameter = null // TODO + val oldDispatchReceiverParameter = oldDescriptor.dispatchReceiverParameter + val newDispatchReceiverParameter = + if (oldDispatchReceiverParameter == null) null + else descriptorSubstituteMap[oldDispatchReceiverParameter] val newTypeParameters = oldDescriptor.typeParameters val newValueParameters = copyValueParameters(oldDescriptor.valueParameters, memberOwner) newDescriptor.initialize( oldDescriptor.extensionReceiverParameter?.type, - newDispatchReceiverParameter, + newDispatchReceiverParameter as? ReceiverParameterDescriptor, newTypeParameters, newValueParameters, oldDescriptor.returnType,