backend.common: fix minor bug in LocalFunctionsLowering

extension receiver parameter should be remapped too
(e.g. to support lambda with receiver)
This commit is contained in:
Svyatoslav Scherbina
2016-12-13 14:26:53 +07:00
committed by SvyatoslavScherbina
parent 7cebc4f676
commit a6a6c677a3
@@ -57,7 +57,7 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
lateinit var transformedDescriptor: FunctionDescriptor
val old2new: MutableMap<ValueDescriptor, ValueParameterDescriptor> = HashMap()
val old2new: MutableMap<ValueDescriptor, ValueDescriptor> = HashMap()
var index: Int = -1
@@ -67,7 +67,7 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
private inner class LocalFunctionsTransformer(val memberFunction: IrFunction) {
val localFunctions: MutableMap<FunctionDescriptor, LocalFunctionContext> = LinkedHashMap()
val new2old: MutableMap<ValueParameterDescriptor, ValueDescriptor> = HashMap()
val new2old: MutableMap<ValueDescriptor, ValueDescriptor> = HashMap()
fun lowerLocalFunctions(): List<IrDeclaration>? {
collectLocalFunctions()
@@ -285,10 +285,14 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
Visibilities.PRIVATE
)
oldDescriptor.extensionReceiverParameter?.let {
localFunctionContext.recordRemapped(it, newDescriptor.extensionReceiverParameter!!)
}
return newDescriptor
}
private fun LocalFunctionContext.recordRemapped(oldDescriptor: ValueDescriptor, newDescriptor: ValueParameterDescriptor): ValueParameterDescriptor {
private fun LocalFunctionContext.recordRemapped(oldDescriptor: ValueDescriptor, newDescriptor: ValueDescriptor): ValueDescriptor {
old2new[oldDescriptor] = newDescriptor
new2old[newDescriptor] = oldDescriptor
return newDescriptor