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
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.backend.jvm.mapping.mapClass
import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.inline.ReifiedTypeInliner import org.jetbrains.kotlin.codegen.inline.ReifiedTypeInliner
import org.jetbrains.kotlin.codegen.inline.newMethodNodeWithCorrectStackSize import org.jetbrains.kotlin.codegen.inline.newMethodNodeWithCorrectStackSize
import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -34,6 +35,7 @@ import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.kSerializerArray
import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.kSerializerType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.kSerializerType
import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringArrayType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringArrayType
import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringType
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.VersionReader
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.ENUM_SERIALIZER_FACTORY_FUNC_NAME import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.ENUM_SERIALIZER_FACTORY_FUNC_NAME
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.MARKED_ENUM_SERIALIZER_FACTORY_FUNC_NAME import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.MARKED_ENUM_SERIALIZER_FACTORY_FUNC_NAME
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializersClassIds.contextSerializerId import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializersClassIds.contextSerializerId
@@ -57,8 +59,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
object Simple : IntrinsicType(stubCallDescriptor) object Simple : IntrinsicType(stubCallDescriptor)
class WithModule(val storedIndex: Int) : class WithModule(val storedIndex: Int) :
IntrinsicType(stubCallDescriptorWithModule) { IntrinsicType(stubCallDescriptorWithModule)
}
} }
companion object { companion object {
@@ -68,7 +69,12 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|| method.typeParameters.size != 1 || method.typeParameters.size != 1
|| method.valueParameters.isNotEmpty() || method.valueParameters.isNotEmpty()
) return null ) return null
return ReifiedSerializerMethod(method.extensionReceiverParameter != null) val receiver = method.extensionReceiverParameter
return if (receiver == null)
ReifiedSerializerMethod(withModule = false)
else if (receiver.type.classFqName?.asString() == "kotlinx.serialization.modules.SerializersModule")
ReifiedSerializerMethod(withModule = true)
else null
} }
val serializersModuleType: Type = Type.getObjectType("kotlinx/serialization/modules/SerializersModule") val serializersModuleType: Type = Type.getObjectType("kotlinx/serialization/modules/SerializersModule")
@@ -95,7 +101,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
val storedIndex = frameMap.enterTemp(materialVal.type) val storedIndex = frameMap.enterTemp(materialVal.type)
mv.store(storedIndex, materialVal.type) mv.store(storedIndex, materialVal.type)
IntrinsicType.WithModule(storedIndex) IntrinsicType.WithModule(storedIndex)
} else IntrinsicType.Simple } else {
codegen.markLineNumber(expression)
IntrinsicType.Simple
}
SerializationJvmIrIntrinsicSupport(codegen.context).generateSerializerForType( SerializationJvmIrIntrinsicSupport(codegen.context).generateSerializerForType(
argument, argument,
mv, mv,
@@ -124,8 +133,14 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
return module.findClassAcrossModuleDependencies(classId)?.let { jvmBackendContext.referenceClass(it) } return module.findClassAcrossModuleDependencies(classId)?.let { jvmBackendContext.referenceClass(it) }
} }
private val currentVersion = VersionReader.getVersionsForCurrentModuleFromTrace(module, jvmBackendContext.state.bindingTrace)
?.implementationVersion
override val runtimeHasEnumSerializerFactoryFunctions: Boolean override val runtimeHasEnumSerializerFactoryFunctions: Boolean
get() = false // TODO get() = currentVersion != null && currentVersion > ApiVersion.parse("1.4.0")!!
private val hasNewContextSerializerSignature: Boolean
get() = currentVersion != null && currentVersion >= ApiVersion.parse("1.2.0")!!
private fun findTypeSerializerOrContext(argType: IrType): IrClassSymbol? = private fun findTypeSerializerOrContext(argType: IrType): IrClassSymbol? =
emptyGenerator.findTypeSerializerOrContextUnchecked(this, argType) emptyGenerator.findTypeSerializerOrContextUnchecked(this, argType)
@@ -243,8 +258,8 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
) { genericArg -> ) { genericArg ->
assert(putReifyMarkerIfNeeded(genericArg, intrinsicType)) assert(putReifyMarkerIfNeeded(genericArg, intrinsicType))
} }
if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer()
} }
if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer()
} }
} }
@@ -405,7 +420,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
aconst(typeMapper.mapTypeCommon(kType, TypeMappingMode.GENERIC_ARGUMENT)) aconst(typeMapper.mapTypeCommon(kType, TypeMappingMode.GENERIC_ARGUMENT))
AsmUtil.wrapJavaClassIntoKClass(this) AsmUtil.wrapJavaClassIntoKClass(this)
signature.append(AsmTypes.K_CLASS_TYPE.descriptor) signature.append(AsmTypes.K_CLASS_TYPE.descriptor)
if (serializer.owner.classId == contextSerializerId && serializer.constructors.any { it.owner.valueParameters.size == 3 }) { // TODO: this isn't working with LAZY IR CLASS if (serializer.owner.classId == contextSerializerId && hasNewContextSerializerSignature) {
// append new additional arguments // append new additional arguments
val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType) val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType)
if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) { if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) {
@@ -74,19 +74,19 @@ public final class IntrinsicsKt : java/lang/Object {
public final static kotlinx.serialization.KSerializer listSer() public final static kotlinx.serialization.KSerializer listSer()
public final static void test() { public final static void test() {
LABEL (L0)
LINENUMBER (28)
GETSTATIC (Simple, Companion, LSimple$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
POP POP
LABEL (L0) LABEL (L1)
LINENUMBER (29) LINENUMBER (29)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L1) LABEL (L2)
LINENUMBER (47)
GETSTATIC (Simple, Companion, LSimple$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
LABEL (L2)
LINENUMBER (45)
NOP
LABEL (L3) LABEL (L3)
POP POP
LABEL (L4) LABEL (L4)
@@ -94,44 +94,40 @@ public final class IntrinsicsKt : java/lang/Object {
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L5) LABEL (L5)
LINENUMBER (48)
GETSTATIC (Box, Companion, LBox$Companion;) GETSTATIC (Box, Companion, LBox$Companion;)
GETSTATIC (Simple, Companion, LSimple$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
LABEL (L6) LABEL (L6)
LINENUMBER (46)
NOP
LABEL (L7)
POP POP
LABEL (L8) LABEL (L7)
LINENUMBER (31) LINENUMBER (31)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L9) LABEL (L8)
LINENUMBER (49)
GETSTATIC (Box, Companion, LBox$Companion;) GETSTATIC (Box, Companion, LBox$Companion;)
GETSTATIC (Simple, Companion, LSimple$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
LABEL (L10) LABEL (L9)
LINENUMBER (47)
NOP
LABEL (L11)
POP POP
LABEL (L12) LABEL (L10)
LINENUMBER (32) LINENUMBER (32)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L13) LABEL (L11)
LINENUMBER (50)
NEW (kotlinx/serialization/internal/ArrayListSerializer) NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP DUP
GETSTATIC (Simple, Companion, LSimple$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;)
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L14) LABEL (L12)
LINENUMBER (48)
NOP
LABEL (L15)
POP POP
LABEL (L13)
LINENUMBER (34)
GETSTATIC (Box, Companion, LBox$Companion;) GETSTATIC (Box, Companion, LBox$Companion;)
NEW (kotlinx/serialization/internal/ArrayListSerializer) NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP DUP
@@ -139,11 +135,12 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
POP POP
LABEL (L16) LABEL (L14)
LINENUMBER (36) LINENUMBER (36)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L17) LABEL (L15)
LINENUMBER (51)
NEW (kotlinx/serialization/internal/ArrayListSerializer) NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP DUP
GETSTATIC (Box, Companion, LBox$Companion;) 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) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L18) LABEL (L16)
LINENUMBER (49)
NOP
LABEL (L19)
POP POP
LABEL (L17)
LINENUMBER (38)
GETSTATIC (kotlinx/serialization/internal/IntSerializer, INSTANCE, Lkotlinx/serialization/internal/IntSerializer;) GETSTATIC (kotlinx/serialization/internal/IntSerializer, INSTANCE, Lkotlinx/serialization/internal/IntSerializer;)
POP POP
LABEL (L18)
LINENUMBER (40)
GETSTATIC (SerializableObject, INSTANCE, LSerializableObject;) GETSTATIC (SerializableObject, INSTANCE, LSerializableObject;)
INVOKEVIRTUAL (SerializableObject, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (SerializableObject, serializer, ()Lkotlinx/serialization/KSerializer;)
POP POP
LABEL (L20) LABEL (L19)
LINENUMBER (42) LINENUMBER (42)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L21) LABEL (L20)
LINENUMBER (52)
NEW (kotlinx/serialization/internal/ArrayListSerializer) NEW (kotlinx/serialization/internal/ArrayListSerializer)
DUP DUP
NEW (kotlinx/serialization/internal/ArrayListSerializer) 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 (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)
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
LABEL (L22) LABEL (L21)
LINENUMBER (50)
NOP
LABEL (L23)
POP POP
LABEL (L24) LABEL (L22)
LINENUMBER (43) 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 RETURN
} }
} }
@@ -76,55 +76,55 @@ public final class IntrinsicsKt : java/lang/Object {
LDC (LSimple;) LDC (LSimple;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
LABEL (L2) LABEL (L2)
LINENUMBER (51) LINENUMBER (53)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (1) ASTORE (1)
LABEL (L3) LABEL (L3)
ICONST_0 ICONST_0
ISTORE (2) ISTORE (2)
LABEL (L4) LABEL (L4)
LINENUMBER (52) LINENUMBER (54)
ALOAD (1) ALOAD (1)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L5) LABEL (L5)
LINENUMBER (51) LINENUMBER (53)
NOP NOP
LABEL (L6) LABEL (L6)
LINENUMBER (29) LINENUMBER (29)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L7) LABEL (L7)
LINENUMBER (53) LINENUMBER (55)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L8) LABEL (L8)
LDC (LSimple;) LDC (LSimple;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
LABEL (L9) LABEL (L9)
LINENUMBER (54) LINENUMBER (56)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L10) LABEL (L10)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L11) LABEL (L11)
LINENUMBER (55) LINENUMBER (57)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L12) LABEL (L12)
LINENUMBER (54) LINENUMBER (56)
NOP NOP
LABEL (L13) LABEL (L13)
LINENUMBER (53) LINENUMBER (55)
NOP NOP
LABEL (L14) LABEL (L14)
LINENUMBER (30) LINENUMBER (30)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L15) LABEL (L15)
LINENUMBER (56) LINENUMBER (58)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L16) LABEL (L16)
@@ -135,29 +135,29 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L17) LABEL (L17)
LINENUMBER (57) LINENUMBER (59)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L18) LABEL (L18)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L19) LABEL (L19)
LINENUMBER (58) LINENUMBER (60)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L20) LABEL (L20)
LINENUMBER (57) LINENUMBER (59)
NOP NOP
LABEL (L21) LABEL (L21)
LINENUMBER (56) LINENUMBER (58)
NOP NOP
LABEL (L22) LABEL (L22)
LINENUMBER (31) LINENUMBER (31)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L23) LABEL (L23)
LINENUMBER (59) LINENUMBER (61)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L24) LABEL (L24)
@@ -168,29 +168,29 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L25) LABEL (L25)
LINENUMBER (60) LINENUMBER (62)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L26) LABEL (L26)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L27) LABEL (L27)
LINENUMBER (61) LINENUMBER (63)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L28) LABEL (L28)
LINENUMBER (60) LINENUMBER (62)
NOP NOP
LABEL (L29) LABEL (L29)
LINENUMBER (59) LINENUMBER (61)
NOP NOP
LABEL (L30) LABEL (L30)
LINENUMBER (32) LINENUMBER (32)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L31) LABEL (L31)
LINENUMBER (62) LINENUMBER (64)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L32) LABEL (L32)
@@ -201,22 +201,22 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L33) LABEL (L33)
LINENUMBER (63) LINENUMBER (65)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L34) LABEL (L34)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L35) LABEL (L35)
LINENUMBER (64) LINENUMBER (66)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L36) LABEL (L36)
LINENUMBER (63) LINENUMBER (65)
NOP NOP
LABEL (L37) LABEL (L37)
LINENUMBER (62) LINENUMBER (64)
NOP NOP
LABEL (L38) LABEL (L38)
LINENUMBER (34) LINENUMBER (34)
@@ -234,26 +234,26 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L40) LABEL (L40)
LINENUMBER (65) LINENUMBER (67)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (1) ASTORE (1)
LABEL (L41) LABEL (L41)
ICONST_0 ICONST_0
ISTORE (2) ISTORE (2)
LABEL (L42) LABEL (L42)
LINENUMBER (66) LINENUMBER (68)
ALOAD (1) ALOAD (1)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L43) LABEL (L43)
LINENUMBER (65) LINENUMBER (67)
NOP NOP
LABEL (L44) LABEL (L44)
LINENUMBER (36) LINENUMBER (36)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L45) LABEL (L45)
LINENUMBER (67) LINENUMBER (69)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L46) LABEL (L46)
@@ -272,22 +272,22 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L47) LABEL (L47)
LINENUMBER (68) LINENUMBER (70)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L48) LABEL (L48)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L49) LABEL (L49)
LINENUMBER (69) LINENUMBER (71)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L50) LABEL (L50)
LINENUMBER (68) LINENUMBER (70)
NOP NOP
LABEL (L51) LABEL (L51)
LINENUMBER (67) LINENUMBER (69)
NOP NOP
LABEL (L52) LABEL (L52)
LINENUMBER (38) LINENUMBER (38)
@@ -297,19 +297,19 @@ public final class IntrinsicsKt : java/lang/Object {
GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;) GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
LABEL (L54) LABEL (L54)
LINENUMBER (70) LINENUMBER (72)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (1) ASTORE (1)
LABEL (L55) LABEL (L55)
ICONST_0 ICONST_0
ISTORE (2) ISTORE (2)
LABEL (L56) LABEL (L56)
LINENUMBER (71) LINENUMBER (73)
ALOAD (1) ALOAD (1)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L57) LABEL (L57)
LINENUMBER (70) LINENUMBER (72)
NOP NOP
LABEL (L58) LABEL (L58)
LINENUMBER (40) LINENUMBER (40)
@@ -319,26 +319,26 @@ public final class IntrinsicsKt : java/lang/Object {
LDC (LSerializableObject;) LDC (LSerializableObject;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
LABEL (L60) LABEL (L60)
LINENUMBER (72) LINENUMBER (74)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (1) ASTORE (1)
LABEL (L61) LABEL (L61)
ICONST_0 ICONST_0
ISTORE (2) ISTORE (2)
LABEL (L62) LABEL (L62)
LINENUMBER (73) LINENUMBER (75)
ALOAD (1) ALOAD (1)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L63) LABEL (L63)
LINENUMBER (72) LINENUMBER (74)
NOP NOP
LABEL (L64) LABEL (L64)
LINENUMBER (42) LINENUMBER (42)
ICONST_0 ICONST_0
ISTORE (0) ISTORE (0)
LABEL (L65) LABEL (L65)
LINENUMBER (74) LINENUMBER (76)
ICONST_0 ICONST_0
ISTORE (1) ISTORE (1)
LABEL (L66) LABEL (L66)
@@ -357,25 +357,47 @@ public final class IntrinsicsKt : java/lang/Object {
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
LABEL (L67) LABEL (L67)
LINENUMBER (75) LINENUMBER (77)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (2) ASTORE (2)
LABEL (L68) LABEL (L68)
ICONST_0 ICONST_0
ISTORE (3) ISTORE (3)
LABEL (L69) LABEL (L69)
LINENUMBER (76) LINENUMBER (78)
ALOAD (2) ALOAD (2)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L70) LABEL (L70)
LINENUMBER (75) LINENUMBER (77)
NOP NOP
LABEL (L71) LABEL (L71)
LINENUMBER (74) LINENUMBER (76)
NOP NOP
LABEL (L72) LABEL (L72)
LINENUMBER (43) LINENUMBER (44)
ICONST_0
ISTORE (0)
LABEL (L73)
LDC (LSimple;)
INVOKESTATIC (kotlin/jvm/internal/Reflection, nullableTypeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
LABEL (L74)
LINENUMBER (79)
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
ASTORE (1)
LABEL (L75)
ICONST_0
ISTORE (2)
LABEL (L76)
LINENUMBER (80)
ALOAD (1)
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L77)
LINENUMBER (79)
NOP
LABEL (L78)
LINENUMBER (45)
RETURN RETURN
} }
} }
@@ -40,4 +40,6 @@ fun test() {
serializer<SerializableObject>() serializer<SerializableObject>()
listSer<List<Box<Int>>>() listSer<List<Box<Int>>>()
serializer<Simple?>()
} }