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 { 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 val transformedDescriptor = localClassConstructors[declaration.descriptor]?.transformedDescriptor
if (transformedDescriptor != null) { if (transformedDescriptor != null) {
return IrConstructorImpl(declaration.startOffset, declaration.endOffset, declaration.origin, 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 { } else {
return super.visitConstructor(declaration) return super.visitConstructor(declaration)
} }
@@ -482,8 +487,8 @@ class LocalDeclarationsLowering(val context: BackendContext) : DeclarationContai
} }
private fun createTransformedValueParameters(localContext: LocalContextWithClosureAsParameters, private fun createTransformedValueParameters(localContext: LocalContextWithClosureAsParameters,
capturedValues: List<ValueDescriptor> capturedValues: List<ValueDescriptor>)
): List<ValueParameterDescriptor> { : List<ValueParameterDescriptor> {
val oldDescriptor = localContext.descriptor val oldDescriptor = localContext.descriptor
val newDescriptor = localContext.transformedDescriptor val newDescriptor = localContext.transformedDescriptor