Fix lowering of default arguments to local ctors. (#309)

This commit is contained in:
Nikolay Igotti
2017-03-07 13:44:28 +03:00
committed by GitHub
parent 526c0dc924
commit d49c497e02
@@ -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<ValueDescriptor>
): List<ValueParameterDescriptor> {
capturedValues: List<ValueDescriptor>)
: List<ValueParameterDescriptor> {
val oldDescriptor = localContext.descriptor
val newDescriptor = localContext.transformedDescriptor