Pass actual serializable properties count in the generated code
to SerialClassDescImpl. This is needed to optimize space allocation.
This commit is contained in:
+1
@@ -76,6 +76,7 @@ class SerializerForEnumsGenerator(
|
|||||||
return irInvoke(
|
return irInvoke(
|
||||||
null, ctor,
|
null, ctor,
|
||||||
irString(serialName),
|
irString(serialName),
|
||||||
|
irInt(serializableDescriptor.enumEntries().size),
|
||||||
typeHint = ctor.descriptor.returnType.toIrType()
|
typeHint = ctor.descriptor.returnType.toIrType()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -110,7 +110,7 @@ open class SerializerIrGenerator(val irClass: IrClass, final override val compil
|
|||||||
val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor)
|
val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor)
|
||||||
return irInvoke(
|
return irInvoke(
|
||||||
null, serialClassDescImplCtor,
|
null, serialClassDescImplCtor,
|
||||||
irString(serialName), if (isGeneratedSerializer) correctThis else irNull()
|
irString(serialName), if (isGeneratedSerializer) correctThis else irNull(), irInt(serializableProperties.size)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ class SerializerForEnumsTranslator(
|
|||||||
val ctor = serialDescForEnums.unsubstitutedPrimaryConstructor!!
|
val ctor = serialDescForEnums.unsubstitutedPrimaryConstructor!!
|
||||||
return JsNew(
|
return JsNew(
|
||||||
context.getInnerReference(ctor),
|
context.getInnerReference(ctor),
|
||||||
listOf(JsStringLiteral(serialName))
|
listOf(JsStringLiteral(serialName), JsIntLiteral(serializableDescriptor.enumEntries().size))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -83,7 +83,7 @@ open class SerializerJsTranslator(
|
|||||||
val serialDescImplConstructor = baseSerialDescImplClass.unsubstitutedPrimaryConstructor!!
|
val serialDescImplConstructor = baseSerialDescImplClass.unsubstitutedPrimaryConstructor!!
|
||||||
return JsNew(
|
return JsNew(
|
||||||
context.getInnerReference(serialDescImplConstructor),
|
context.getInnerReference(serialDescImplConstructor),
|
||||||
listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral())
|
listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral(), JsIntLiteral(serializableProperties.size))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -110,7 +110,8 @@ open class SerializerCodegenImpl(
|
|||||||
} else {
|
} else {
|
||||||
load(0, serializerAsmType)
|
load(0, serializerAsmType)
|
||||||
}
|
}
|
||||||
invokespecial(descImplType.internalName, "<init>", "(Ljava/lang/String;${generatedSerializerType.descriptor})V", false)
|
aconst(serializableProperties.size)
|
||||||
|
invokespecial(descImplType.internalName, "<init>", "(Ljava/lang/String;${generatedSerializerType.descriptor}I)V", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun ExpressionCodegen.addElementsContentToDescriptor(descriptorVar: Int) = with(v) {
|
protected open fun ExpressionCodegen.addElementsContentToDescriptor(descriptorVar: Int) = with(v) {
|
||||||
|
|||||||
+2
-1
@@ -46,7 +46,8 @@ class SerializerForEnumsCodegen(
|
|||||||
anew(descriptorForEnumsType)
|
anew(descriptorForEnumsType)
|
||||||
dup()
|
dup()
|
||||||
aconst(serialName)
|
aconst(serialName)
|
||||||
invokespecial(descriptorForEnumsType.internalName, "<init>", "(Ljava/lang/String;)V", false)
|
aconst(serializableDescriptor.enumEntries().size)
|
||||||
|
invokespecial(descriptorForEnumsType.internalName, "<init>", "(Ljava/lang/String;I)V", false)
|
||||||
checkcast(descImplType)
|
checkcast(descImplType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-3
@@ -17,7 +17,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa
|
|||||||
LDC (ListOfUsers)
|
LDC (ListOfUsers)
|
||||||
GETSTATIC (INSTANCE, LListOfUsers$$serializer;)
|
GETSTATIC (INSTANCE, LListOfUsers$$serializer;)
|
||||||
CHECKCAST
|
CHECKCAST
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V)
|
LDC (1)
|
||||||
|
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
|
||||||
ASTORE (0)
|
ASTORE (0)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
LDC (list)
|
LDC (list)
|
||||||
@@ -317,7 +318,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ
|
|||||||
LDC (OptionalUser)
|
LDC (OptionalUser)
|
||||||
GETSTATIC (INSTANCE, LOptionalUser$$serializer;)
|
GETSTATIC (INSTANCE, LOptionalUser$$serializer;)
|
||||||
CHECKCAST
|
CHECKCAST
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V)
|
LDC (1)
|
||||||
|
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
|
||||||
ASTORE (0)
|
ASTORE (0)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
LDC (user)
|
LDC (user)
|
||||||
@@ -659,7 +661,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in
|
|||||||
LDC (User)
|
LDC (User)
|
||||||
GETSTATIC (INSTANCE, LUser$$serializer;)
|
GETSTATIC (INSTANCE, LUser$$serializer;)
|
||||||
CHECKCAST
|
CHECKCAST
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V)
|
LDC (2)
|
||||||
|
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
|
||||||
ASTORE (0)
|
ASTORE (0)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
LDC (firstName)
|
LDC (firstName)
|
||||||
|
|||||||
Reference in New Issue
Block a user