Added extension receiver procesing on interface lowering
This commit is contained in:
committed by
Dmitry Petrov
parent
f0d09288a8
commit
289cc8fed7
+11
-2
@@ -66,7 +66,10 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
||||
it.body = null
|
||||
|
||||
val mapping: Map<DeclarationDescriptor, ValueParameterDescriptor> =
|
||||
(listOf(it.descriptor.dispatchReceiverParameter!!) + it.descriptor.valueParameters).zip(functionDescriptorImpl.valueParameters).toMap()
|
||||
(
|
||||
listOf(it.descriptor.dispatchReceiverParameter!!, it.descriptor.extensionReceiverParameter).filterNotNull() +
|
||||
it.descriptor.valueParameters
|
||||
).zip(functionDescriptorImpl.valueParameters).toMap()
|
||||
|
||||
newFunction.body?.transform(VariableRemapper(mapping), null)
|
||||
}
|
||||
@@ -110,8 +113,14 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||
newFunction, null, 0, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
||||
interfaceDescriptor.defaultType, false, false, false, false, null, interfaceDescriptor.source, null)
|
||||
val oldExtensionReceiver = descriptor.extensionReceiverParameter
|
||||
val extensionReceiver = if (oldExtensionReceiver != null )
|
||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||
newFunction, null, 1, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
||||
oldExtensionReceiver.value.type, false, false, false, false, null, oldExtensionReceiver.source, null)
|
||||
else null
|
||||
|
||||
val valueParameters = listOf(dispatchReceiver) +
|
||||
val valueParameters = listOf(dispatchReceiver, extensionReceiver).filterNotNull() +
|
||||
descriptor.valueParameters.map { it.copy(newFunction, it.name, it.index + 1) }
|
||||
|
||||
newFunction.initialize(
|
||||
|
||||
Reference in New Issue
Block a user