From 2e88dd0675204fbd564eaec890a49f091f933c7e Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Mon, 9 Jan 2017 16:49:50 +0700 Subject: [PATCH] backend: fix minor bug in LocalFunctionsLowering extension receiver parameter should be remapped too (e.g. to support lambda with receiver) --- .../kotlin/backend/jvm/lower/LocalFunctionsLowering.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt index 9e8a41df1c6..e3f14714c16 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt @@ -59,7 +59,7 @@ class LocalFunctionsLowering(val context: JvmBackendContext): ClassLoweringPass lateinit var transformedDescriptor: FunctionDescriptor - val old2new: MutableMap = HashMap() + val old2new: MutableMap = HashMap() var index: Int = -1 @@ -69,7 +69,7 @@ class LocalFunctionsLowering(val context: JvmBackendContext): ClassLoweringPass private inner class LocalFunctionsTransformer(val memberFunction: IrFunction) { val localFunctions: MutableMap = LinkedHashMap() - val new2old: MutableMap = HashMap() + val new2old: MutableMap = HashMap() fun lowerLocalFunctions(): List? { collectLocalFunctions() @@ -287,10 +287,14 @@ class LocalFunctionsLowering(val context: JvmBackendContext): ClassLoweringPass 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: ParameterDescriptor): ParameterDescriptor { old2new[oldDescriptor] = newDescriptor new2old[newDescriptor] = oldDescriptor return newDescriptor