JVM_IR: Support suspend lambdas with receivers and multiple parameters
In old BE we generate `create` for this kind of suspend lambdas, which, like in simple suspend lambdas is responsible for putting arguments (including extension receiver) to fields. But, if number of parameters of suspend lambda (including receiver) >= 1, there is no need to generate `create`, since `create` is called only by `createCoroutine` and friends from stdlib, and there is no version of `createCoroutine` for lambdas with multiple parameters. Thus, in old BE we generate a redundant method, which affects method count. In JVM_BE we decided to 'inline' create into `invoke` for suspend lambdas with multiple parameters.
This commit is contained in:
+10
@@ -8402,6 +8402,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionTypeCall/localVal.kt", "kotlin.coroutines");
|
||||
}
|
||||
|
||||
@TestMetadata("manyParametersNoCapture.kt")
|
||||
public void testManyParametersNoCapture_1_2() throws Exception {
|
||||
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionTypeCall/manyParametersNoCapture.kt", "kotlin.coroutines.experimental");
|
||||
}
|
||||
|
||||
@TestMetadata("manyParametersNoCapture.kt")
|
||||
public void testManyParametersNoCapture_1_3() throws Exception {
|
||||
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionTypeCall/manyParametersNoCapture.kt", "kotlin.coroutines");
|
||||
}
|
||||
|
||||
@TestMetadata("manyParameters.kt")
|
||||
public void testManyParameters_1_2() throws Exception {
|
||||
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/suspendFunctionTypeCall/manyParameters.kt", "kotlin.coroutines.experimental");
|
||||
|
||||
Reference in New Issue
Block a user