Do not generate fields for unused suspend lambda parameters
This also allows us to not spill them in the lambda. But, disable this optimization for local named functions. #KT-16222 In progress
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
interface Result
|
||||
|
||||
interface Foo {
|
||||
suspend operator fun Result.component1(): Any = TODO()
|
||||
}
|
||||
|
||||
fun use(c: suspend Foo.() -> Unit) {}
|
||||
|
||||
fun generate(): Result = TODO()
|
||||
|
||||
fun test() {
|
||||
use {
|
||||
// This component1 accesses both dispatch and extension receivers,
|
||||
// So, there should be p$
|
||||
val (value) = generate()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class Component1Kt$test$1 {
|
||||
field L$0: java.lang.Object
|
||||
field label: int
|
||||
private field p$: Foo
|
||||
inner class Component1Kt$test$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 Component1Kt {
|
||||
inner class Component1Kt$test$1
|
||||
public final static @org.jetbrains.annotations.NotNull method generate(): Result
|
||||
public final static method test(): void
|
||||
public final static method use(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Foo$DefaultImpls {
|
||||
inner class Foo$DefaultImpls
|
||||
public static @org.jetbrains.annotations.Nullable method component1(p0: Foo, @org.jetbrains.annotations.NotNull p1: Result, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface Foo {
|
||||
inner class Foo$DefaultImpls
|
||||
public abstract @org.jetbrains.annotations.Nullable method component1(@org.jetbrains.annotations.NotNull p0: Result, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface Result
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun use(c: suspend (Pair<Int, Int>) -> Unit) {}
|
||||
|
||||
fun blackhole(a: Any) {}
|
||||
|
||||
fun test() {
|
||||
use { (a, b) ->
|
||||
}
|
||||
use { (a, b) ->
|
||||
blackhole(a)
|
||||
}
|
||||
use { (a, b) ->
|
||||
blackhole(b)
|
||||
}
|
||||
use {
|
||||
blackhole(it)
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class DestructuredKt$test$1 {
|
||||
field label: int
|
||||
inner class DestructuredKt$test$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 DestructuredKt$test$2 {
|
||||
field label: int
|
||||
private field p$0: kotlin.Pair
|
||||
inner class DestructuredKt$test$2
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 DestructuredKt$test$3 {
|
||||
field label: int
|
||||
private field p$0: kotlin.Pair
|
||||
inner class DestructuredKt$test$3
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 DestructuredKt$test$4 {
|
||||
field label: int
|
||||
private field p$0: kotlin.Pair
|
||||
inner class DestructuredKt$test$4
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 DestructuredKt {
|
||||
inner class DestructuredKt$test$1
|
||||
inner class DestructuredKt$test$2
|
||||
inner class DestructuredKt$test$3
|
||||
inner class DestructuredKt$test$4
|
||||
public final static method blackhole(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
|
||||
public final static method test(): void
|
||||
public final static method use(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
interface Result
|
||||
|
||||
interface Foo {
|
||||
val Result.value: Any
|
||||
get() = TODO()
|
||||
}
|
||||
|
||||
fun use(c: suspend Foo.() -> Unit) {}
|
||||
|
||||
fun generate(): Result = TODO()
|
||||
|
||||
fun test() {
|
||||
use {
|
||||
val value = generate().value
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class FieldKt$test$1 {
|
||||
field label: int
|
||||
private field p$: Foo
|
||||
inner class FieldKt$test$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 FieldKt {
|
||||
inner class FieldKt$test$1
|
||||
public final static @org.jetbrains.annotations.NotNull method generate(): Result
|
||||
public final static method test(): void
|
||||
public final static method use(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class Foo$DefaultImpls {
|
||||
inner class Foo$DefaultImpls
|
||||
public static @org.jetbrains.annotations.NotNull method getValue(p0: Foo, @org.jetbrains.annotations.NotNull p1: Result): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface Foo {
|
||||
inner class Foo$DefaultImpls
|
||||
public abstract @org.jetbrains.annotations.NotNull method getValue(@org.jetbrains.annotations.NotNull p0: Result): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface Result
|
||||
@@ -0,0 +1,74 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun use2(c: suspend Long.(Double, String) -> Unit) {}
|
||||
fun use(c: suspend Long.(String) -> Unit) {}
|
||||
|
||||
fun blackhole(a: Any) {}
|
||||
|
||||
fun test() {
|
||||
// test$1: p$0, p$1
|
||||
use2 { a, b ->
|
||||
blackhole(b + a)
|
||||
}
|
||||
// test$2: p$0
|
||||
use2 { a, b ->
|
||||
blackhole(a)
|
||||
}
|
||||
// test$3: p$1
|
||||
use2 { a, b ->
|
||||
blackhole(b)
|
||||
}
|
||||
// test$4: p$0
|
||||
use2 { a, _ ->
|
||||
blackhole(a)
|
||||
}
|
||||
// test$5: p$1
|
||||
use2 { _, b ->
|
||||
blackhole(b)
|
||||
}
|
||||
// test$6: p$, p$0, p$1
|
||||
use2 { a, b ->
|
||||
blackhole(b + a + this)
|
||||
}
|
||||
// test$7: p$, p$0
|
||||
use2 { a, b ->
|
||||
blackhole(a + this.toDouble())
|
||||
}
|
||||
// test$8: p$, p$1
|
||||
use2 { a, b ->
|
||||
blackhole(b + this)
|
||||
}
|
||||
// test$9: p$, p$0
|
||||
use2 { a, _ ->
|
||||
blackhole(a + this.toDouble())
|
||||
}
|
||||
// test$10: p$, p$1
|
||||
use2 { _, b ->
|
||||
blackhole(b + this)
|
||||
}
|
||||
// test$11: p$
|
||||
use2 { _, _ ->
|
||||
blackhole(this)
|
||||
}
|
||||
// test$12:
|
||||
use2 { _, _ -> }
|
||||
// test$13: p$, p$0
|
||||
use {
|
||||
blackhole(it + this)
|
||||
}
|
||||
// test$14: p$
|
||||
use {
|
||||
blackhole(this)
|
||||
}
|
||||
// test$15: p$0
|
||||
use {
|
||||
blackhole(it)
|
||||
}
|
||||
// test$16:
|
||||
use {}
|
||||
// test$17: p$
|
||||
use {
|
||||
blackhole(toString())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class LambdaKt$test$1 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
private field p$1: java.lang.String
|
||||
inner class LambdaKt$test$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$10 {
|
||||
field label: int
|
||||
private field p$1: java.lang.String
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$10
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$11 {
|
||||
field label: int
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$11
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$12 {
|
||||
field label: int
|
||||
inner class LambdaKt$test$12
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$13 {
|
||||
field label: int
|
||||
private field p$0: java.lang.String
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$13
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.String, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: 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 LambdaKt$test$14 {
|
||||
field label: int
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$14
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.String, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: 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 LambdaKt$test$15 {
|
||||
field label: int
|
||||
private field p$0: java.lang.String
|
||||
inner class LambdaKt$test$15
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.String, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: 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 LambdaKt$test$16 {
|
||||
field label: int
|
||||
inner class LambdaKt$test$16
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.String, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: 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 LambdaKt$test$17 {
|
||||
field label: int
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$17
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.String, @org.jetbrains.annotations.NotNull p2: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: 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 LambdaKt$test$2 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
inner class LambdaKt$test$2
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$3 {
|
||||
field label: int
|
||||
private field p$1: java.lang.String
|
||||
inner class LambdaKt$test$3
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$4 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
inner class LambdaKt$test$4
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$5 {
|
||||
field label: int
|
||||
private field p$1: java.lang.String
|
||||
inner class LambdaKt$test$5
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$6 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
private field p$1: java.lang.String
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$6
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$7 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$7
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$8 {
|
||||
field label: int
|
||||
private field p$1: java.lang.String
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$8
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt$test$9 {
|
||||
field label: int
|
||||
private field p$0: double
|
||||
private field p$: long
|
||||
inner class LambdaKt$test$9
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(p0: long, p1: double, @org.jetbrains.annotations.NotNull p2: java.lang.String, @org.jetbrains.annotations.NotNull p3: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: 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 LambdaKt {
|
||||
inner class LambdaKt$test$1
|
||||
inner class LambdaKt$test$10
|
||||
inner class LambdaKt$test$11
|
||||
inner class LambdaKt$test$12
|
||||
inner class LambdaKt$test$13
|
||||
inner class LambdaKt$test$14
|
||||
inner class LambdaKt$test$15
|
||||
inner class LambdaKt$test$16
|
||||
inner class LambdaKt$test$17
|
||||
inner class LambdaKt$test$2
|
||||
inner class LambdaKt$test$3
|
||||
inner class LambdaKt$test$4
|
||||
inner class LambdaKt$test$5
|
||||
inner class LambdaKt$test$6
|
||||
inner class LambdaKt$test$7
|
||||
inner class LambdaKt$test$8
|
||||
inner class LambdaKt$test$9
|
||||
public final static method blackhole(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
|
||||
public final static method test(): void
|
||||
public final static method use(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function3): void
|
||||
public final static method use2(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function4): void
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
import kotlin.coroutines.*
|
||||
import kotlin.experimental.*
|
||||
|
||||
interface CoroutineScope
|
||||
|
||||
@OptIn(ExperimentalTypeInference::class)
|
||||
public fun <E> CoroutineScope.produce(
|
||||
@BuilderInference block: suspend ProducerScope<E>.() -> Unit
|
||||
): ReceiveChannel<E> = TODO()
|
||||
|
||||
interface ProducerScope<in E> : CoroutineScope, SendChannel<E> {
|
||||
public val channel: SendChannel<E>
|
||||
}
|
||||
|
||||
interface ReceiveChannel<out E>
|
||||
interface SelectBuilder<in R> {
|
||||
operator fun <P, Q> SelectClause2<P, Q>.invoke(param: P, block: suspend (Q) -> R)
|
||||
}
|
||||
interface SelectClause2<in P, out Q>
|
||||
interface SendChannel<in E> {
|
||||
val onSend: SelectClause2<E, SendChannel<E>>
|
||||
}
|
||||
suspend inline fun <R> select(crossinline builder: SelectBuilder<R>.() -> Unit): R {
|
||||
TODO()
|
||||
}
|
||||
|
||||
fun CoroutineScope.produceNumbers(side: SendChannel<Int>) = produce<Int> {
|
||||
select<Unit> {
|
||||
onSend(1) {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
@kotlin.Metadata
|
||||
public interface CoroutineScope
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface ProducerScope {
|
||||
public abstract @org.jetbrains.annotations.NotNull method getChannel(): SendChannel
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface ReceiveChannel
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface SelectBuilder {
|
||||
public abstract method invoke(@org.jetbrains.annotations.NotNull p0: SelectClause2, p1: java.lang.Object, @org.jetbrains.annotations.NotNull p2: kotlin.jvm.functions.Function2): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface SelectClause2
|
||||
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class SelectKt$produceNumbers$1$1$1 {
|
||||
field label: int
|
||||
inner class SelectKt$produceNumbers$1$1$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 SelectKt$produceNumbers$1 {
|
||||
field label: int
|
||||
private field p$: ProducerScope
|
||||
inner class SelectKt$produceNumbers$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 SelectKt {
|
||||
inner class SelectKt$produceNumbers$1
|
||||
public final static @org.jetbrains.annotations.NotNull method produce(@org.jetbrains.annotations.NotNull p0: CoroutineScope, @kotlin.BuilderInference @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function2): ReceiveChannel
|
||||
public final static @org.jetbrains.annotations.NotNull method produceNumbers(@org.jetbrains.annotations.NotNull p0: CoroutineScope, @org.jetbrains.annotations.NotNull p1: SendChannel): ReceiveChannel
|
||||
private final static @org.jetbrains.annotations.Nullable method select$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public final static @org.jetbrains.annotations.Nullable method select(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public interface SendChannel {
|
||||
public abstract @org.jetbrains.annotations.NotNull method getOnSend(): SelectClause2
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun use(c: suspend (String) -> Unit) {}
|
||||
|
||||
fun test() {
|
||||
use {
|
||||
throw IllegalStateException("")
|
||||
it + ""
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
@kotlin.coroutines.jvm.internal.DebugMetadata
|
||||
@kotlin.Metadata
|
||||
final class UnreachableKt$test$1 {
|
||||
field label: int
|
||||
private field p$0: java.lang.String
|
||||
inner class UnreachableKt$test$1
|
||||
method <init>(p0: kotlin.coroutines.Continuation): void
|
||||
public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation
|
||||
public final method invoke(p0: java.lang.Object, p1: 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 UnreachableKt {
|
||||
inner class UnreachableKt$test$1
|
||||
public final static method test(): void
|
||||
public final static method use(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void
|
||||
}
|
||||
Reference in New Issue
Block a user