Improve line numbers handling in serialization intrinsic

Fix nullable serializers on top-level & method with incorrect receiver

Improve handling of different runtime versions
This commit is contained in:
Leonid Startsev
2022-08-29 17:24:48 +02:00
committed by Space
parent aac9a06474
commit eae588abea
4 changed files with 125 additions and 84 deletions
@@ -74,19 +74,19 @@ public final class IntrinsicsKt : java/lang/Object {
public final static kotlinx.serialization.KSerializer listSer()
public final static void test() {
LABEL (L0)
LINENUMBER (28)
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
POP
LABEL (L0)
LABEL (L1)
LINENUMBER (29)
ICONST_0
ISTORE (0)
LABEL (L1)
LABEL (L2)
LINENUMBER (47)
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
LABEL (L2)
LINENUMBER (45)
NOP
LABEL (L3)
POP
LABEL (L4)
@@ -94,44 +94,40 @@ public final class IntrinsicsKt : java/lang/Object {
ICONST_0
ISTORE (0)
LABEL (L5)
LINENUMBER (48)
GETSTATIC (Box, Companion, LBox$Companion;)
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
LABEL (L6)
LINENUMBER (46)
NOP
LABEL (L7)
POP
LABEL (L8)
LABEL (L7)
LINENUMBER (31)
ICONST_0
ISTORE (0)
LABEL (L9)
LABEL (L8)
LINENUMBER (49)
GETSTATIC (Box, Companion, LBox$Companion;)
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
LABEL (L10)
LINENUMBER (47)
NOP
LABEL (L11)
LABEL (L9)
POP
LABEL (L12)
LABEL (L10)
LINENUMBER (32)
ICONST_0
ISTORE (0)
LABEL (L13)
LABEL (L11)
LINENUMBER (50)
NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L14)
LINENUMBER (48)
NOP
LABEL (L15)
LABEL (L12)
POP
LABEL (L13)
LINENUMBER (34)
GETSTATIC (Box, Companion, LBox$Companion;)
NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP
@@ -139,11 +135,12 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
POP
LABEL (L16)
LABEL (L14)
LINENUMBER (36)
ICONST_0
ISTORE (0)
LABEL (L17)
LABEL (L15)
LINENUMBER (51)
NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP
GETSTATIC (Box, Companion, LBox$Companion;)
@@ -153,21 +150,23 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L18)
LINENUMBER (49)
NOP
LABEL (L19)
LABEL (L16)
POP
LABEL (L17)
LINENUMBER (38)
GETSTATIC (kotlinx/serialization/internal/IntSerializer, INSTANCE, Lkotlinx/serialization/internal/IntSerializer;)
POP
LABEL (L18)
LINENUMBER (40)
GETSTATIC (SerializableObject, INSTANCE, LSerializableObject;)
INVOKEVIRTUAL (SerializableObject, serializer, ()Lkotlinx/serialization/KSerializer;)
POP
LABEL (L20)
LABEL (L19)
LINENUMBER (42)
ICONST_0
ISTORE (0)
LABEL (L21)
LABEL (L20)
LINENUMBER (52)
NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP
NEW (kotlinx/serialization/internal/ArrayListSerializer)
@@ -178,13 +177,16 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKESPECIAL (Box$$serializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L22)
LINENUMBER (50)
NOP
LABEL (L23)
LABEL (L21)
POP
LABEL (L24)
LINENUMBER (43)
LABEL (L22)
LINENUMBER (44)
GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKESTATIC (kotlinx/serialization/builtins/BuiltinSerializersKt, getNullable, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
POP
LABEL (L23)
LINENUMBER (45)
RETURN
}
}