Fixed dispatch receiver during copying of function descriptor
This commit is contained in:
+6
-2
@@ -77,6 +77,7 @@ internal class DeepCopyIrTreeWithDescriptors(val targetFunction: IrFunction, val
|
|||||||
val oldDescriptor = declaration.descriptor
|
val oldDescriptor = declaration.descriptor
|
||||||
val newDescriptor = copyClassDescriptor(oldDescriptor)
|
val newDescriptor = copyClassDescriptor(oldDescriptor)
|
||||||
descriptorSubstituteMap[oldDescriptor] = newDescriptor
|
descriptorSubstituteMap[oldDescriptor] = newDescriptor
|
||||||
|
descriptorSubstituteMap[oldDescriptor.thisAsReceiverParameter] = newDescriptor.thisAsReceiverParameter
|
||||||
super.visitClass(declaration)
|
super.visitClass(declaration)
|
||||||
|
|
||||||
val constructors = oldDescriptor.constructors.map {
|
val constructors = oldDescriptor.constructors.map {
|
||||||
@@ -158,13 +159,16 @@ internal class DeepCopyIrTreeWithDescriptors(val targetFunction: IrFunction, val
|
|||||||
oldDescriptor.source
|
oldDescriptor.source
|
||||||
).apply { isTailrec = oldDescriptor.isTailrec }
|
).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 newTypeParameters = oldDescriptor.typeParameters
|
||||||
val newValueParameters = copyValueParameters(oldDescriptor.valueParameters, memberOwner)
|
val newValueParameters = copyValueParameters(oldDescriptor.valueParameters, memberOwner)
|
||||||
|
|
||||||
newDescriptor.initialize(
|
newDescriptor.initialize(
|
||||||
oldDescriptor.extensionReceiverParameter?.type,
|
oldDescriptor.extensionReceiverParameter?.type,
|
||||||
newDispatchReceiverParameter,
|
newDispatchReceiverParameter as? ReceiverParameterDescriptor,
|
||||||
newTypeParameters,
|
newTypeParameters,
|
||||||
newValueParameters,
|
newValueParameters,
|
||||||
oldDescriptor.returnType,
|
oldDescriptor.returnType,
|
||||||
|
|||||||
Reference in New Issue
Block a user