From d49c497e02bd9100bb29da7349a74921ceaafc53 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Tue, 7 Mar 2017 13:44:28 +0300 Subject: [PATCH] Fix lowering of default arguments to local ctors. (#309) --- .../common/lower/LocalDeclarationsLowering.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index d2c48c9499b..dad456c15f3 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -199,12 +199,17 @@ class LocalDeclarationsLowering(val context: BackendContext) : DeclarationContai } override fun visitConstructor(declaration: IrConstructor): IrStatement { - // Body is transformed separately. + // Body is transformed separately. See loop over constructors in rewriteDeclarations(). val transformedDescriptor = localClassConstructors[declaration.descriptor]?.transformedDescriptor if (transformedDescriptor != null) { return IrConstructorImpl(declaration.startOffset, declaration.endOffset, declaration.origin, - transformedDescriptor, declaration.body!!) + transformedDescriptor, declaration.body!!).apply { + declaration.descriptor.valueParameters.filter { it.declaresDefaultValue() }.forEach { argument -> + val body = declaration.getDefault(argument)!! + this.putDefault(oldParameterToNew[argument] as ValueParameterDescriptor, body) + } + } } else { return super.visitConstructor(declaration) } @@ -482,8 +487,8 @@ class LocalDeclarationsLowering(val context: BackendContext) : DeclarationContai } private fun createTransformedValueParameters(localContext: LocalContextWithClosureAsParameters, - capturedValues: List - ): List { + capturedValues: List) + : List { val oldDescriptor = localContext.descriptor val newDescriptor = localContext.transformedDescriptor