From 996d6d8f74c563bdf6b251ef03ef5305e475774f Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Tue, 7 Mar 2017 13:42:05 +0300 Subject: [PATCH] IR: vararg lowering processing delegation constructor call --- .../backend/konan/lower/VarargLowering.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VarargLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VarargLowering.kt index 5e11aed9155..f97645d036d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VarargLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VarargLowering.kt @@ -49,22 +49,32 @@ class VarargInjectionLowering internal constructor(val context: Context): Declar private fun lower(owner:DeclarationDescriptor, element: IrElement?) { element?.transformChildrenVoid(object: IrElementTransformerVoid() { val transformer = this - override fun visitCall(expression: IrCall): IrExpression { + + private fun replaceEmptyParameterWithEmptyArray(expression: IrMemberAccessExpression) { log("call of: ${expression.descriptor}") context.createIrBuilder(owner, expression.startOffset, expression.endOffset).apply { expression.descriptor.valueParameters.forEach { log("varargElementType: ${it.varargElementType} expr: ${ir2string(expression.getValueArgument(it))}") } - expression.descriptor.valueParameters.filter{it.varargElementType != null && expression.getValueArgument(it) == null}.forEach { + expression.descriptor.valueParameters.filter { it.varargElementType != null && expression.getValueArgument(it) == null }.forEach { expression.putValueArgument(it.index, - IrVarargImpl(startOffset = startOffset, - endOffset = endOffset, - type = it.type, - varargElementType = it.varargElementType!!) + IrVarargImpl(startOffset = startOffset, + endOffset = endOffset, + type = it.type, + varargElementType = it.varargElementType!!) ) } } expression.transformChildrenVoid(this) + } + + override fun visitCall(expression: IrCall): IrExpression { + replaceEmptyParameterWithEmptyArray(expression) + return expression + } + + override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression { + replaceEmptyParameterWithEmptyArray(expression) return expression }