IR: don't stop lowering expression on first vararg expression, please lower deeper
This commit is contained in:
committed by
vvlevchenko
parent
489723721f
commit
4673de2fdd
+7
-2
@@ -34,8 +34,13 @@ class VarargInjectionLowering internal constructor(val context: Context): Functi
|
||||
|
||||
private fun lower(owner:FunctionDescriptor, irBody: IrBody) {
|
||||
irBody.transformChildrenVoid(object: IrElementTransformerVoid() {
|
||||
val transformer = this
|
||||
override fun visitCall(expression: IrCall): IrExpression {
|
||||
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.putValueArgument(it.index,
|
||||
IrVarargImpl(startOffset = startOffset,
|
||||
@@ -45,7 +50,7 @@ class VarargInjectionLowering internal constructor(val context: Context): Functi
|
||||
)
|
||||
}
|
||||
}
|
||||
super.visitCall(expression)
|
||||
expression.transformChildrenVoid(this)
|
||||
return expression
|
||||
}
|
||||
|
||||
@@ -69,7 +74,7 @@ class VarargInjectionLowering internal constructor(val context: Context): Functi
|
||||
|
||||
val vars = expression.elements.map {
|
||||
val initVar = scope.createTemporaryVariable(
|
||||
(it as? IrSpreadElement)?.expression ?: it as IrExpression,
|
||||
((it as? IrSpreadElement)?.expression ?: it as IrExpression).apply { it.transformChildrenVoid(transformer) },
|
||||
"elem".synthesizedString, true)
|
||||
block.statements.add(initVar)
|
||||
it to initVar
|
||||
|
||||
Reference in New Issue
Block a user