IR: vararg lowering processing delegation constructor call
This commit is contained in:
committed by
vvlevchenko
parent
48b0754a7b
commit
996d6d8f74
+16
-6
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user