JVM_IR: mark origins of capture fields in suspend lambdas

This commit is contained in:
pyos
2020-02-20 12:33:25 +01:00
committed by Ilmir Usmanov
parent 6b98ea2378
commit c5ffbfd33c
6 changed files with 22 additions and 13 deletions
@@ -178,7 +178,18 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
addField("p\$", it.type) addField("p\$", it.type)
} }
val parametersFields = info.function.valueParameters.map { addField(it.name, it.type) } val parametersFields = info.function.valueParameters.map {
addField {
name = it.name
type = it.type
origin = if (it.isCrossinline)
LocalDeclarationsLowering.DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE
else
LocalDeclarationsLowering.DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE
isFinal = true
visibility = JavaVisibilities.PACKAGE_VISIBILITY
}
}
val parametersWithoutArguments = parametersFields.withIndex() val parametersWithoutArguments = parametersFields.withIndex()
.mapNotNull { (i, field) -> if (info.reference.getValueArgument(i) == null) field else null } .mapNotNull { (i, field) -> if (info.reference.getValueArgument(i) == null) field else null }
val parametersWithArguments = parametersFields.withIndex() val parametersWithArguments = parametersFields.withIndex()
@@ -14,7 +14,7 @@ final class LambdaWithLongReceiverKt$box$1$1 {
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class LambdaWithLongReceiverKt$box$1 { final class LambdaWithLongReceiverKt$box$1 {
private field $res: kotlin.jvm.internal.Ref$ObjectRef synthetic final @org.jetbrains.annotations.NotNull field $res: kotlin.jvm.internal.Ref$ObjectRef
field L$0: java.lang.Object field L$0: java.lang.Object
private field label: int private field label: int
inner class LambdaWithLongReceiverKt$box$1 inner class LambdaWithLongReceiverKt$box$1
@@ -1,12 +1,12 @@
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1$1 { final class LambdaWithMultipleParametersKt$box$1$1 {
private field a: java.lang.String synthetic final @org.jetbrains.annotations.NotNull field a: java.lang.String
private field b: long synthetic final field b: long
private field c: long synthetic final field c: long
private field d: long synthetic final field d: long
private field e: long synthetic final field e: long
private field f: long synthetic final field f: long
private field label: int private field label: int
inner class LambdaWithMultipleParametersKt$box$1 inner class LambdaWithMultipleParametersKt$box$1
inner class LambdaWithMultipleParametersKt$box$1$1 inner class LambdaWithMultipleParametersKt$box$1$1
@@ -18,7 +18,7 @@ final class LambdaWithMultipleParametersKt$box$1$1 {
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1 { final class LambdaWithMultipleParametersKt$box$1 {
private field $res: kotlin.jvm.internal.Ref$ObjectRef synthetic final @org.jetbrains.annotations.NotNull field $res: kotlin.jvm.internal.Ref$ObjectRef
field L$0: java.lang.Object field L$0: java.lang.Object
private field label: int private field label: int
inner class LambdaWithMultipleParametersKt$box$1 inner class LambdaWithMultipleParametersKt$box$1
@@ -56,7 +56,7 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 {
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class CrossinlineKt$box$1 { final class CrossinlineKt$box$1 {
private field $res: kotlin.jvm.internal.Ref$IntRef synthetic final @org.jetbrains.annotations.NotNull field $res: kotlin.jvm.internal.Ref$IntRef
field L$0: java.lang.Object field L$0: java.lang.Object
field L$1: java.lang.Object field L$1: java.lang.Object
field L$2: java.lang.Object field L$2: java.lang.Object
@@ -1,7 +1,7 @@
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class InlineWithoutStateMachineKt$box$1 { final class InlineWithoutStateMachineKt$box$1 {
private field $result: kotlin.jvm.internal.Ref$ObjectRef synthetic final @org.jetbrains.annotations.NotNull field $result: kotlin.jvm.internal.Ref$ObjectRef
field L$0: java.lang.Object field L$0: java.lang.Object
field L$1: java.lang.Object field L$1: java.lang.Object
private field label: int private field label: int
@@ -2,8 +2,6 @@
// COMMON_COROUTINES_TEST // COMMON_COROUTINES_TEST
// WITH_RUNTIME // WITH_RUNTIME
// WITH_COROUTINES // WITH_COROUTINES
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR
import COROUTINES_PACKAGE.* import COROUTINES_PACKAGE.*
import helpers.* import helpers.*