JVM: do not write trivial SMAPs to any classes

Even ones inside inline functions. This was a backwards compatibility
hack for Kotlin 1.4, where the inliner would crash if it attempted to
regenerate an anonymous object with no SMAP; that has been fixed in 1.5,
and ever since then trivial SMAPs could be inferred from line number
markers in methods.

There are three kinds of changes to tests in this commit:

  * Some SMAPs are gone entirely - self-explanatory.

  * Some SMAPs have narrower line ranges - that's because the old SMAP
    had the range for the entire file, while the new one only maps up to
    the last line number used in the class. There should be no
    difference in behavior.

  * Some "source file name" markers are removed in continuation objects
    - continuations don't have any line numbers, so there's no debugging
    information anyway. The actual source information is in the
    containing class.
This commit is contained in:
Sonya Valchuk
2024-03-11 09:00:41 +00:00
committed by Space Cloud
parent fc992274bb
commit e5ad035039
43 changed files with 104 additions and 406 deletions
@@ -151,12 +151,16 @@ public abstract class AbstractClassBuilder implements ClassBuilder {
@Override @Override
public void visitSMAP(@NotNull SourceMapper smap, boolean backwardsCompatibleSyntax) { public void visitSMAP(@NotNull SourceMapper smap, boolean backwardsCompatibleSyntax) {
if (!GENERATE_SMAP) return; if (GENERATE_SMAP && !smap.isTrivial()) {
List<FileMapping> fileMappings = smap.getResultMappings();
List<FileMapping> fileMappings = smap.getResultMappings(); visitSource(fileMappings.get(0).getName(), SMAPBuilder.INSTANCE.build(fileMappings, backwardsCompatibleSyntax));
if (fileMappings.isEmpty()) return; } else {
SourceInfo sourceInfo = smap.getSourceInfo();
visitSource(fileMappings.get(0).getName(), SMAPBuilder.INSTANCE.build(fileMappings, backwardsCompatibleSyntax)); if (sourceInfo == null) return;
String fileName = sourceInfo.getSourceFileName();
if (fileName == null) return;
visitSource(fileName, null);
}
} }
@Override @Override
@@ -181,8 +181,6 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
superInterfaceAsmTypes superInterfaceAsmTypes
); );
initDefaultSourceMappingIfNeeded();
v.visitSource(element.getContainingFile().getName(), null); v.visitSource(element.getContainingFile().getName(), null);
} }
@@ -242,8 +242,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
v.visitSource(myClass.getContainingKtFile().getName(), null); v.visitSource(myClass.getContainingKtFile().getName(), null);
initDefaultSourceMappingIfNeeded();
writeEnclosingMethod(); writeEnclosingMethod();
AnnotationCodegen.forClass(v.getVisitor(), this, state).genAnnotations(descriptor, null, null); AnnotationCodegen.forClass(v.getVisitor(), this, state).genAnnotations(descriptor, null, null);
@@ -92,7 +92,6 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
private NameGenerator inlineNameGenerator; private NameGenerator inlineNameGenerator;
private boolean jvmAssertFieldGenerated; private boolean jvmAssertFieldGenerated;
private boolean alwaysWriteSourceMap;
private SourceMapper sourceMapper; private SourceMapper sourceMapper;
public MemberCodegen( public MemberCodegen(
@@ -187,10 +186,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
writeInnerClasses(); writeInnerClasses();
if (alwaysWriteSourceMap || (sourceMapper != null && !sourceMapper.isTrivial())) { v.visitSMAP(getOrCreateSourceMapper(), !state.getLanguageVersionSettings().supportsFeature(LanguageFeature.CorrectSourceMappingSyntax));
v.visitSMAP(getOrCreateSourceMapper(), !state.getLanguageVersionSettings().supportsFeature(LanguageFeature.CorrectSourceMappingSyntax));
}
v.done(state.getConfig().getGenerateSmapCopyToAnnotation()); v.done(state.getConfig().getGenerateSmapCopyToAnnotation());
} }
@@ -749,25 +745,11 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
@NotNull @NotNull
public SourceMapper getOrCreateSourceMapper() { public SourceMapper getOrCreateSourceMapper() {
if (sourceMapper == null) { if (sourceMapper == null) {
// note: this is used in InlineCodegen and the element is always physical (KtElement) there sourceMapper = new SourceMapper(element instanceof KtElement ? SourceInfo.Companion.createFromPsi((KtElement)element, getClassName()) : null);
sourceMapper = new SourceMapper(SourceInfo.Companion.createFromPsi((KtElement)element, getClassName()));
} }
return sourceMapper; return sourceMapper;
} }
protected void initDefaultSourceMappingIfNeeded() {
if (state.getConfig().isInlineDisabled()) return;
CodegenContext parentContext = context.getParentContext();
while (parentContext != null) {
if (parentContext.isInlineMethodContext()) {
alwaysWriteSourceMap = true;
return;
}
parentContext = parentContext.getParentContext();
}
}
protected void generateConstInstance(@NotNull Type thisAsmType, @NotNull Type fieldAsmType) { protected void generateConstInstance(@NotNull Type thisAsmType, @NotNull Type fieldAsmType) {
v.newField( v.newField(
JvmDeclarationOriginKt.OtherOriginFromPure(element), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, JvmAbi.INSTANCE_FIELD, JvmDeclarationOriginKt.OtherOriginFromPure(element), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, JvmAbi.INSTANCE_FIELD,
@@ -73,7 +73,6 @@ class ClassCodegen private constructor(
private val parentClassCodegen by lazy { private val parentClassCodegen by lazy {
(parentFunction?.parentAsClass ?: irClass.parent as? IrClass)?.let { getOrCreate(it, context) } (parentFunction?.parentAsClass ?: irClass.parent as? IrClass)?.let { getOrCreate(it, context) }
} }
private val withinInline: Boolean by lazy { parentClassCodegen?.withinInline == true || parentFunction?.isInline == true }
private val metadataSerializer: MetadataSerializer by lazy { private val metadataSerializer: MetadataSerializer by lazy {
context.backendExtension.createSerializer( context.backendExtension.createSerializer(
context, irClass, type, visitor.serializationBindings, parentClassCodegen?.metadataSerializer context, irClass, type, visitor.serializationBindings, parentClassCodegen?.metadataSerializer
@@ -202,13 +201,7 @@ class ClassCodegen private constructor(
generateKotlinMetadataAnnotation() generateKotlinMetadataAnnotation()
if (withinInline || !smap.isTrivial) { visitor.visitSMAP(smap, !config.languageVersionSettings.supportsFeature(LanguageFeature.CorrectSourceMappingSyntax))
visitor.visitSMAP(smap, !config.languageVersionSettings.supportsFeature(LanguageFeature.CorrectSourceMappingSyntax))
} else {
smap.sourceInfo!!.sourceFileName?.let {
visitor.visitSource(it, null)
}
}
reifiedTypeParametersUsages.mergeAll(irClass.reifiedTypeParameters) reifiedTypeParametersUsages.mergeAll(irClass.reifiedTypeParameters)
@@ -1,7 +1,6 @@
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -94,7 +93,6 @@ public final class CrossinlineKt$consumeEach$2 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$filter$$inlined$source$1$1 { public final class CrossinlineKt$filter$$inlined$source$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -121,7 +119,6 @@ public final class CrossinlineKt$filter$$inlined$source$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$filter$lambda$3$$inlined$consumeEach$1$1 { public final class CrossinlineKt$filter$lambda$3$$inlined$consumeEach$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$filter$lambda$3$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$filter$lambda$3$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -149,7 +146,6 @@ public final class CrossinlineKt$filter$lambda$3$$inlined$consumeEach$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 { public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -191,7 +187,6 @@ final class CrossinlineKt$fold$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$range$$inlined$source$1$1 { public final class CrossinlineKt$range$$inlined$source$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$range$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$range$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field I$0: int field I$0: int
field I$1: int field I$1: int
@@ -1,7 +1,6 @@
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$box$1$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$box$1$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -15,7 +14,6 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 { public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -56,7 +54,6 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 { public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$box$1$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$box$1$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -85,7 +82,6 @@ public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -176,7 +172,6 @@ public final class CrossinlineKt$consumeEach$2 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$filter$$inlined$source$1$1 { public final class CrossinlineKt$filter$$inlined$source$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$filter$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -190,7 +185,6 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 { public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$filter$$inlined$source$1$lambda$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$filter$$inlined$source$1$lambda$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -231,7 +225,6 @@ public final class CrossinlineKt$filter$$inlined$source$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 { public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$fold$$inlined$consumeEach$1.send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -273,7 +266,6 @@ public final class CrossinlineKt$fold$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class CrossinlineKt$range$$inlined$source$1$1 { public final class CrossinlineKt$range$$inlined$source$1$1 {
// source: 'crossinline.kt'
enclosing method CrossinlineKt$range$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method CrossinlineKt$range$$inlined$source$1.consume(LSink;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field I$0: int field I$0: int
field I$1: int field I$1: int
@@ -116,7 +116,6 @@ public final class flow/InnerObjectRetransformationKt$flow$1 {
@kotlin.Metadata @kotlin.Metadata
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 { public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 {
// source: 'innerObjectRetransformation.kt'
enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -12,8 +12,8 @@ MODULE main
+ 2 innerObjectRetransformation.kt + 2 innerObjectRetransformation.kt
flow/InnerObjectRetransformationKt flow/InnerObjectRetransformationKt
*L *L
1#1,64:1 1#1,36:1
54#2:65 54#2:37
*E *E
} ) } )
K2 K2
@@ -27,7 +27,7 @@ MODULE main
+ 2 innerObjectRetransformation.kt + 2 innerObjectRetransformation.kt
flow/InnerObjectRetransformationKt flow/InnerObjectRetransformationKt
*L *L
1#1,64:1 1#1,36:1
55#2:65 55#2:37
*E *E
} ) } )
@@ -115,7 +115,6 @@ public final class flow/InnerObjectRetransformationKt$flow$1 {
@kotlin.Metadata @kotlin.Metadata
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 { public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1$1 {
// source: 'innerObjectRetransformation.kt'
enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -141,7 +140,6 @@ public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$1 {
@kotlin.Metadata @kotlin.Metadata
public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1 { public final class flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2$1 {
// source: 'innerObjectRetransformation.kt'
enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method flow/InnerObjectRetransformationKt$flowWith$$inlined$flow$2.collect(Lflow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -70,16 +70,16 @@ MODULE main
+ 3 1.kt + 3 1.kt
test/_1Kt test/_1Kt
*L *L
1#1,32:1 1#1,25:1
17#2:33 17#2:26
18#2:36 18#2:29
29#3,2:34 29#3,2:27
*S KotlinDebug *S KotlinDebug
*F *F
+ 1 1.kt + 1 1.kt
test/OutputWorkScreenView test/OutputWorkScreenView
*L *L
17#1:34,2 17#1:27,2
*E *E
} ) } )
K2 K2
@@ -95,15 +95,15 @@ MODULE main
+ 3 1.kt + 3 1.kt
test/_1Kt test/_1Kt
*L *L
1#1,32:1 1#1,25:1
17#2:33 17#2:26
18#2:36 18#2:29
29#3,2:34 29#3,2:27
*S KotlinDebug *S KotlinDebug
*F *F
+ 1 1.kt + 1 1.kt
test/OutputWorkScreenView test/OutputWorkScreenView
*L *L
17#1:34,2 17#1:27,2
*E *E
} ) } )
@@ -92,8 +92,8 @@ MODULE main
+ 2 1.kt + 2 1.kt
test/A test/A
*L *L
1#1,33:1 1#1,30:1
20#2,2:34 20#2,2:31
*E *E
} ) } )
K2 K2
@@ -107,8 +107,8 @@ MODULE main
+ 2 1.kt + 2 1.kt
test/A test/A
*L *L
1#1,33:1 1#1,30:1
20#2,2:34 20#2,2:31
*E *E
} ) } )
CLASS test/A$foo$$inlined$bar$1.class CLASS test/A$foo$$inlined$bar$1.class
@@ -124,9 +124,9 @@ MODULE main
+ 2 1.kt + 2 1.kt
test/A test/A
*L *L
1#1,33:1 1#1,30:1
20#2:34 20#2:31
14#2,8:35 14#2,8:32
*E *E
} ) } )
K2 K2
@@ -140,8 +140,8 @@ MODULE main
+ 2 1.kt + 2 1.kt
test/A test/A
*L *L
1#1,33:1 1#1,30:1
20#2:34 20#2:31
14#2,8:35 14#2,8:32
*E *E
} ) } )
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/Introspector$SchemaRetriever$inSchema$lambda$1
*L
1#1,14:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -41,7 +31,7 @@ test/Introspector$SchemaRetriever$inSchema$lambda$1
+ 2 2.kt + 2 2.kt
IntrospectorImpl$SchemaRetriever IntrospectorImpl$SchemaRetriever
*L *L
1#1,14:1 1#1,10:1
22#2:15 22#2:11
*E *E
@@ -1,5 +1,5 @@
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// IGNORE_INLINER_K2: IR // IGNORE_INLINER: IR
// FILE: 1.kt // FILE: 1.kt
package builders package builders
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
builders/_1Kt$call$lambda$1
*L
1#1,13:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -41,7 +31,7 @@ builders/_1Kt$call$lambda$1
+ 2 2.kt + 2 2.kt
_2Kt _2Kt
*L *L
1#1,13:1 1#1,10:1
21#2,2:14 21#2,2:11
*E *E
@@ -27,25 +27,3 @@ _2Kt
30#1:37 30#1:37
*E *E
SMAP
2.kt
Kotlin
*S Kotlin
*F
+ 1 2.kt
_2Kt$test$1$1
*L
1#1,32:1
*E
SMAP
2.kt
Kotlin
*S Kotlin
*F
+ 1 2.kt
_2Kt$test$1$1
*L
1#1,32:1
*E
@@ -1,7 +1,7 @@
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// IGNORE_INLINER: IR
// FILE: 1.kt // FILE: 1.kt
package builders package builders
inline fun call(crossinline init: () -> Unit) { inline fun call(crossinline init: () -> Unit) {
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
builders/_1Kt$call$1
*L
1#1,15:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -41,7 +31,7 @@ builders/_1Kt$call$1
+ 2 2.kt + 2 2.kt
_2Kt _2Kt
*L *L
1#1,15:1 1#1,11:1
24#2,2:16 24#2,2:12
*E *E
@@ -1,8 +1,6 @@
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR, JVM_MULTI_MODULE_IR_AGAINST_OLD
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND_K2_MULTI_MODULE: JVM_IR JVM_IR_SERIALIZE
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt // FILE: 1.kt
package builders package builders
inline fun call(crossinline init: () -> Unit) { inline fun call(crossinline init: () -> Unit) {
return init() return init()
@@ -11,41 +11,19 @@ _2Kt
+ 2 1.kt + 2 1.kt
builders/_1Kt builders/_1Kt
*L *L
1#1,34:1 1#1,32:1
17#1,3:36 15#1,3:34
20#1,8:40 18#1,8:38
8#2:35 6#2:33
8#2:39 6#2:37
*S KotlinDebug *S KotlinDebug
*F *F
+ 1 2.kt + 1 2.kt
_2Kt _2Kt
*L *L
32#1:36,3 30#1:34,3
32#1:40,8 30#1:38,8
19#1:35 17#1:33
32#1:39 30#1:37
*E
SMAP
2.kt
Kotlin
*S Kotlin
*F
+ 1 2.kt
_2Kt$test$1$1
*L
1#1,34:1
*E
SMAP
2.kt
Kotlin
*S Kotlin
*F
+ 1 2.kt
_2Kt$test$1$1
*L
1#1,34:1
*E *E
@@ -1,10 +1,9 @@
// IGNORE // IGNORE
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// IGNORE_BACKEND_MULTI_MODULE: JVM, JVM_IR, JVM_MULTI_MODULE_OLD_AGAINST_IR, JVM_MULTI_MODULE_IR_AGAINST_OLD
// IGNORE_BACKEND_K2_MULTI_MODULE: JVM_IR JVM_IR_SERIALIZE
// FILE: 1.kt // FILE: 1.kt
// NO_SMAP_DUMP // NO_SMAP_DUMP
package builders package builders
inline fun call(crossinline init: () -> Unit) { inline fun call(crossinline init: () -> Unit) {
@@ -9,15 +9,15 @@ _2Kt
+ 2 1.kt + 2 1.kt
builders/_1Kt builders/_1Kt
*L *L
1#1,36:1 1#1,35:1
15#2,3:37 14#2,3:36
11#2,15:40 10#2,15:39
*S KotlinDebug *S KotlinDebug
*F *F
+ 1 2.kt + 1 2.kt
_2Kt _2Kt
*L *L
34#1:37,3 33#1:36,3
34#1:40,15 33#1:39,15
*E *E
@@ -1,7 +1,9 @@
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// IGNORE_BACKEND: JVM
// IGNORE_BACKEND_MULTI_MODULE: JVM, JVM_MULTI_MODULE_IR_AGAINST_OLD
// IGNORE_INLINER: IR
// FILE: 1.kt // FILE: 1.kt
// NO_SMAP_DUMP // NO_SMAP_DUMP
package builders package builders
//TODO there is a bug in asm it's skips linenumber on same line on reading bytecode //TODO there is a bug in asm it's skips linenumber on same line on reading bytecode
inline fun call(crossinline init: () -> Unit) { inline fun call(crossinline init: () -> Unit) {
@@ -9,16 +9,16 @@ _2Kt
+ 2 1.kt + 2 1.kt
builders/_1Kt builders/_1Kt
*L *L
1#1,34:1 1#1,36:1
12#2,3:35 14#2,3:37
8#2,15:38 10#2,15:40
*S KotlinDebug *S KotlinDebug
*F *F
+ 1 2.kt + 1 2.kt
_2Kt _2Kt
*L *L
31#1:35,3 33#1:37,3
31#1:38,15 33#1:40,15
*E *E
SMAP SMAP
@@ -31,7 +31,7 @@ builders/_1Kt$test$1$1
+ 2 2.kt + 2 2.kt
_2Kt _2Kt
*L *L
1#1,25:1 1#1,20:1
31#2:26 33#2:21
*E *E
+1 -1
View File
@@ -1,6 +1,6 @@
// This test depends on line numbers // This test depends on line numbers
// IGNORE_INLINER: IR
// WITH_STDLIB // WITH_STDLIB
// FILE: 1.kt // FILE: 1.kt
package test package test
+4 -36
View File
@@ -1,36 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineMe2$2
*L
1#1,23:1
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineMe1$2
*L
1#1,23:1
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineMe1$2$run$1
*L
1#1,23:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -65,8 +33,8 @@ test/_1Kt$inlineMe2$2
+ 2 2.kt + 2 2.kt
_2Kt$box$1 _2Kt$box$1
*L *L
1#1,23:1 1#1,21:1
45#2,2:24 45#2,2:22
*E *E
SMAP SMAP
@@ -79,7 +47,7 @@ test/_1Kt$inlineMe1$2
+ 2 2.kt + 2 2.kt
_2Kt$box$1 _2Kt$box$1
*L *L
1#1,23:1 1#1,15:1
42#2,2:24 42#2,2:16
*E *E
@@ -1,12 +1,2 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineFun$1
*L
1#1,10:1
*E
@@ -1,4 +1,4 @@
// IGNORE_INLINER_K2: IR // IGNORE_INLINER: IR
// SEPARATE_SMAP_DUMPS // SEPARATE_SMAP_DUMPS
// SKIP_INLINE_CHECK_IN: lParams$default // SKIP_INLINE_CHECK_IN: lParams$default
@@ -1,15 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$lParams$1
*L
1#1,41:1
*E
SMAP SMAP
1.kt 1.kt
Kotlin Kotlin
@@ -40,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1$lambda$1 test/_1Kt$lParams$1$lambda$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -1,15 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$lParams$1
*L
1#1,41:1
*E
SMAP SMAP
1.kt 1.kt
Kotlin Kotlin
@@ -40,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1$lambda$1 test/_1Kt$lParams$1$lambda$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -110,7 +88,7 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1$lambda$1 test/_1Kt$lParams$1$lambda$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E *E
@@ -1,7 +1,7 @@
// SEPARATE_SMAP_DUMPS // SEPARATE_SMAP_DUMPS
// SKIP_INLINE_CHECK_IN: lParams$default // SKIP_INLINE_CHECK_IN: lParams$default
// IGNORE_BACKEND: JS // IGNORE_BACKEND: JS
// IGNORE_INLINER_K2: IR // IGNORE_INLINER: IR
// FILE: 1.kt // FILE: 1.kt
package test package test
@@ -29,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -29,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -81,7 +70,7 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E *E
@@ -1,7 +1,7 @@
// SEPARATE_SMAP_DUMPS // SEPARATE_SMAP_DUMPS
// SKIP_INLINE_CHECK_IN: lParams$default // SKIP_INLINE_CHECK_IN: lParams$default
// IGNORE_BACKEND: JS // IGNORE_BACKEND: JS
// IGNORE_INLINER_K2: IR // IGNORE_INLINER: IR
// FILE: 1.kt // FILE: 1.kt
package test package test
@@ -29,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -29,19 +29,8 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$kValue$lambda$1
*L
1#1,41:1
*E *E
// FILE: 2.kt // FILE: 2.kt
@@ -81,7 +70,7 @@ test/_1Kt$kValue$lambda$1
+ 2 1.kt + 2 1.kt
test/_1Kt$lParams$1 test/_1Kt$lParams$1
*L *L
1#1,41:1 1#1,32:1
35#2:42 35#2:33
*E *E
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$lParams$1
*L
1#1,38:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -1,4 +1,4 @@
// IGNORE_INLINER_K2: IR // IGNORE_INLINER: IR
// SKIP_INLINE_CHECK_IN: inlineFun$default // SKIP_INLINE_CHECK_IN: inlineFun$default
// FILE: 1.kt // FILE: 1.kt
@@ -1,25 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineFun$lambda2$1
*L
1#1,13:1
*E
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineFun$1
*L
1#1,13:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -52,7 +31,7 @@ test/_1Kt$inlineFun$lambda2$1
+ 2 1.kt + 2 1.kt
test/_1Kt$inlineFun$1 test/_1Kt$inlineFun$1
*L *L
1#1,13:1 1#1,9:1
7#2:14 7#2:10
*E *E
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$inlineFun$1
*L
1#1,11:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -1,14 +1,4 @@
// FILE: 1.kt // FILE: 1.kt
SMAP
1.kt
Kotlin
*S Kotlin
*F
+ 1 1.kt
test/_1Kt$lParams$1
*L
1#1,38:1
*E
// FILE: 2.kt // FILE: 2.kt
SMAP SMAP
@@ -12,8 +12,8 @@ MODULE main
+ 2 box.kt + 2 box.kt
BoxKt BoxKt
*L *L
1#1,48:1 1#1,38:1
66#2:49 66#2:39
*E *E
} ) } )
K2 K2
@@ -27,7 +27,7 @@ MODULE main
+ 2 box.kt + 2 box.kt
BoxKt BoxKt
*L *L
1#1,48:1 1#1,38:1
67#2:49 67#2:39
*E *E
} ) } )
@@ -81,7 +81,6 @@ public final class TcoContinuationKt$foo$$inlined$flow$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class TcoContinuationKt$foo$$inlined$map$1$2$1 { public final class TcoContinuationKt$foo$$inlined$map$1$2$1 {
// source: 'tcoContinuation.kt'
enclosing method TcoContinuationKt$foo$$inlined$map$1$2.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method TcoContinuationKt$foo$$inlined$map$1$2.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -116,7 +115,6 @@ public final class TcoContinuationKt$foo$$inlined$map$1 {
@kotlin.Metadata @kotlin.Metadata
public final class TcoContinuationKt$map$$inlined$transform$1$1 { public final class TcoContinuationKt$map$$inlined$transform$1$1 {
// source: 'tcoContinuation.kt'
enclosing method TcoContinuationKt$map$$inlined$transform$1.collect(LFlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method TcoContinuationKt$map$$inlined$transform$1.collect(LFlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -130,7 +128,6 @@ public final class TcoContinuationKt$map$$inlined$transform$1$1 {
@kotlin.Metadata @kotlin.Metadata
@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.coroutines.jvm.internal.DebugMetadata
public final class TcoContinuationKt$map$$inlined$transform$1$2$1 { public final class TcoContinuationKt$map$$inlined$transform$1$2$1 {
// source: 'tcoContinuation.kt'
enclosing method TcoContinuationKt$map$$inlined$transform$1$2.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method TcoContinuationKt$map$$inlined$transform$1$2.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field L$0: java.lang.Object field L$0: java.lang.Object
field label: int field label: int
@@ -170,7 +167,6 @@ public final class TcoContinuationKt$map$$inlined$transform$1 {
@kotlin.Metadata @kotlin.Metadata
public final class TcoContinuationKt$transform$$inlined$flow$1$1 { public final class TcoContinuationKt$transform$$inlined$flow$1$1 {
// source: 'tcoContinuation.kt'
enclosing method TcoContinuationKt$transform$$inlined$flow$1.collect(LFlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method TcoContinuationKt$transform$$inlined$flow$1.collect(LFlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object
@@ -196,7 +192,6 @@ public final class TcoContinuationKt$transform$$inlined$flow$1 {
@kotlin.Metadata @kotlin.Metadata
public final class TcoContinuationKt$transform$lambda$1$$inlined$collect$1$1 { public final class TcoContinuationKt$transform$lambda$1$$inlined$collect$1$1 {
// source: 'tcoContinuation.kt'
enclosing method TcoContinuationKt$transform$lambda$1$$inlined$collect$1.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; enclosing method TcoContinuationKt$transform$lambda$1$$inlined$collect$1.emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
field label: int field label: int
synthetic field result: java.lang.Object synthetic field result: java.lang.Object