IR: vararg lowering processing delegation constructor call

This commit is contained in:
Vasily Levchenko
2017-03-07 13:42:05 +03:00
committed by vvlevchenko
parent 48b0754a7b
commit 996d6d8f74
@@ -49,22 +49,32 @@ class VarargInjectionLowering internal constructor(val context: Context): Declar
private fun lower(owner:DeclarationDescriptor, element: IrElement?) { private fun lower(owner:DeclarationDescriptor, element: IrElement?) {
element?.transformChildrenVoid(object: IrElementTransformerVoid() { element?.transformChildrenVoid(object: IrElementTransformerVoid() {
val transformer = this val transformer = this
override fun visitCall(expression: IrCall): IrExpression {
private fun replaceEmptyParameterWithEmptyArray(expression: IrMemberAccessExpression) {
log("call of: ${expression.descriptor}") log("call of: ${expression.descriptor}")
context.createIrBuilder(owner, expression.startOffset, expression.endOffset).apply { context.createIrBuilder(owner, expression.startOffset, expression.endOffset).apply {
expression.descriptor.valueParameters.forEach { expression.descriptor.valueParameters.forEach {
log("varargElementType: ${it.varargElementType} expr: ${ir2string(expression.getValueArgument(it))}") 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, expression.putValueArgument(it.index,
IrVarargImpl(startOffset = startOffset, IrVarargImpl(startOffset = startOffset,
endOffset = endOffset, endOffset = endOffset,
type = it.type, type = it.type,
varargElementType = it.varargElementType!!) varargElementType = it.varargElementType!!)
) )
} }
} }
expression.transformChildrenVoid(this) expression.transformChildrenVoid(this)
}
override fun visitCall(expression: IrCall): IrExpression {
replaceEmptyParameterWithEmptyArray(expression)
return expression
}
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression {
replaceEmptyParameterWithEmptyArray(expression)
return expression return expression
} }