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:
committed by
SvyatoslavScherbina
parent
7cebc4f676
commit
a6a6c677a3
+7
-3
@@ -57,7 +57,7 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
|
|||||||
|
|
||||||
lateinit var transformedDescriptor: FunctionDescriptor
|
lateinit var transformedDescriptor: FunctionDescriptor
|
||||||
|
|
||||||
val old2new: MutableMap<ValueDescriptor, ValueParameterDescriptor> = HashMap()
|
val old2new: MutableMap<ValueDescriptor, ValueDescriptor> = HashMap()
|
||||||
|
|
||||||
var index: Int = -1
|
var index: Int = -1
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
|
|||||||
|
|
||||||
private inner class LocalFunctionsTransformer(val memberFunction: IrFunction) {
|
private inner class LocalFunctionsTransformer(val memberFunction: IrFunction) {
|
||||||
val localFunctions: MutableMap<FunctionDescriptor, LocalFunctionContext> = LinkedHashMap()
|
val localFunctions: MutableMap<FunctionDescriptor, LocalFunctionContext> = LinkedHashMap()
|
||||||
val new2old: MutableMap<ValueParameterDescriptor, ValueDescriptor> = HashMap()
|
val new2old: MutableMap<ValueDescriptor, ValueDescriptor> = HashMap()
|
||||||
|
|
||||||
fun lowerLocalFunctions(): List<IrDeclaration>? {
|
fun lowerLocalFunctions(): List<IrDeclaration>? {
|
||||||
collectLocalFunctions()
|
collectLocalFunctions()
|
||||||
@@ -285,10 +285,14 @@ class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerL
|
|||||||
Visibilities.PRIVATE
|
Visibilities.PRIVATE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
oldDescriptor.extensionReceiverParameter?.let {
|
||||||
|
localFunctionContext.recordRemapped(it, newDescriptor.extensionReceiverParameter!!)
|
||||||
|
}
|
||||||
|
|
||||||
return newDescriptor
|
return newDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun LocalFunctionContext.recordRemapped(oldDescriptor: ValueDescriptor, newDescriptor: ValueParameterDescriptor): ValueParameterDescriptor {
|
private fun LocalFunctionContext.recordRemapped(oldDescriptor: ValueDescriptor, newDescriptor: ValueDescriptor): ValueDescriptor {
|
||||||
old2new[oldDescriptor] = newDescriptor
|
old2new[oldDescriptor] = newDescriptor
|
||||||
new2old[newDescriptor] = oldDescriptor
|
new2old[newDescriptor] = oldDescriptor
|
||||||
return newDescriptor
|
return newDescriptor
|
||||||
|
|||||||
Reference in New Issue
Block a user