JVM_IR KT-41911 process big arity 'invoke' arguments recursively

This commit is contained in:
Dmitry Petrov
2020-12-01 09:00:46 +03:00
parent b0e2d5637d
commit 4c3ffc3451
10 changed files with 64 additions and 2 deletions
@@ -57,16 +57,21 @@ private class FunctionNVarargBridgeLowering(val context: JvmBackendContext) :
at(expression)
irCall(functionNInvokeFun).apply {
dispatchReceiver = irImplicitCast(
expression.dispatchReceiver!!,
expression.dispatchReceiver!!.transformVoid(),
this@FunctionNVarargBridgeLowering.context.ir.symbols.functionN.defaultType
)
putValueArgument(0, irArray(irSymbols.array.typeWith(context.irBuiltIns.anyNType)) {
(0 until expression.valueArgumentsCount).forEach { +expression.getValueArgument(it)!! }
(0 until expression.valueArgumentsCount).forEach {
+expression.getValueArgument(it)!!.transformVoid()
}
})
}
}
}
private fun IrExpression.transformVoid() =
transform(this@FunctionNVarargBridgeLowering, null)
override fun visitClassNew(declaration: IrClass): IrStatement {
val bigArityFunctionSuperTypes = declaration.superTypes.filterIsInstance<IrSimpleType>().filter {
it.isFunctionType && it.arguments.size > BuiltInFunctionArity.BIG_ARITY