JVM_IR: Support suspend lambdas with multiple parameters

This commit is contained in:
Ilmir Usmanov
2019-10-01 22:38:48 +03:00
parent f4a7c839d3
commit e736b782dd
6 changed files with 132 additions and 12 deletions
@@ -0,0 +1,28 @@
// WITH_RUNTIME
// WITH_COROUTINES
// COMMON_COROUTINES_TEST
// CHECK_BYTECODE_LISTING
// IGNORE_BACKEND: JVM
// TARGET_BACKEND: JVM
import helpers.*
import COROUTINES_PACKAGE.*
fun builder(c: suspend() -> Unit) {
c.startCoroutine(EmptyContinuation)
}
suspend fun call(c: suspend(String, Long, Long, Long, Long, Long) -> String): String {
return c("OK", 1, 2, 3, 4, 5)
}
fun box(): String {
var res = ""
builder {
res = call { a, b, c, d, e, f ->
"$a$b$c$d$e$f"
}
}
if (res != "OK12345") return res
return "OK"
}
@@ -0,0 +1,47 @@
@kotlin.Metadata
final class LambdaWithMultipleParameters_irKt$$call$Continuation {
field label: int
@org.jetbrains.annotations.NotNull field result: java.lang.Object
public method <init>(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class LambdaWithMultipleParameters_irKt$box$1$1 {
private field a: java.lang.String
private field b: long
private field c: long
private field d: long
private field e: long
private field f: long
private field label: int
inner class LambdaWithMultipleParameters_irKt$box$1$1
public method <init>(): void
public method <init>(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): void
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object): java.lang.Object
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class LambdaWithMultipleParameters_irKt$box$1 {
private field $res: kotlin.jvm.internal.Ref$ObjectRef
field L$0: java.lang.Object
private field label: int
inner class LambdaWithMultipleParameters_irKt$box$1
public method <init>(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.internal.Ref$ObjectRef): void
public method <init>(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.internal.Ref$ObjectRef, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): void
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
public final method invoke(p0: java.lang.Object): java.lang.Object
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.Metadata
public final class LambdaWithMultipleParameters_irKt {
inner class LambdaWithMultipleParameters_irKt$box$1
inner class LambdaWithMultipleParameters_irKt$box$1$1
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void
public final static @org.jetbrains.annotations.Nullable method call(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function7, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
}