IR: add IrClass.getInlineClassRepresentation, serialize/deserialize it
The change in FirDeclarationUtil is needed because in case of unsigned types loaded from the standard library, the primary constructor for some reason is not the first, but the second in the list of constructors.
This commit is contained in:
+13
@@ -10,6 +10,7 @@ import java.util.Collections
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -157,5 +159,16 @@ internal class PersistentIrClass(
|
||||
}
|
||||
}
|
||||
|
||||
override var inlineClassRepresentationField: InlineClassRepresentation<IrSimpleType>? = null
|
||||
|
||||
override var inlineClassRepresentation: InlineClassRepresentation<IrSimpleType>?
|
||||
get() = getCarrier().inlineClassRepresentationField
|
||||
set(v) {
|
||||
if (inlineClassRepresentation !== v) {
|
||||
setCarrier()
|
||||
inlineClassRepresentationField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var attributeOwnerId: IrAttributeContainer = this
|
||||
}
|
||||
|
||||
+7
-2
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.ir.declarations.persistent.carriers
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
// Auto-generated by compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/Main.kt. DO NOT EDIT!
|
||||
@@ -26,6 +28,7 @@ internal interface ClassCarrier : DeclarationCarrier{
|
||||
val typeParametersField: List<IrTypeParameter>
|
||||
val typeParametersSymbolField: List<IrTypeParameterSymbol>
|
||||
val superTypesField: List<IrType>
|
||||
val inlineClassRepresentationField: InlineClassRepresentation<IrSimpleType>?
|
||||
|
||||
override fun clone(): ClassCarrier {
|
||||
return ClassCarrierImpl(
|
||||
@@ -37,7 +40,8 @@ internal interface ClassCarrier : DeclarationCarrier{
|
||||
visibilityField,
|
||||
modalityField,
|
||||
typeParametersSymbolField,
|
||||
superTypesField
|
||||
superTypesField,
|
||||
inlineClassRepresentationField
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -51,7 +55,8 @@ internal class ClassCarrierImpl(
|
||||
override val visibilityField: DescriptorVisibility,
|
||||
override val modalityField: Modality,
|
||||
override val typeParametersSymbolField: List<IrTypeParameterSymbol>,
|
||||
override val superTypesField: List<IrType>
|
||||
override val superTypesField: List<IrType>,
|
||||
override val inlineClassRepresentationField: InlineClassRepresentation<IrSimpleType>?
|
||||
) : ClassCarrier {
|
||||
|
||||
override val thisReceiverField: IrValueParameter?
|
||||
|
||||
+7
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.codedInputStream
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructorCall as ProtoIrConstructorCall
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrInlineClassRepresentation as ProtoIrInlineClassRepresentation
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrVariable as ProtoIrVariable
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirAnonymousInitializerCarrier
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirClassCarrier
|
||||
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.PirTypeAliasCarri
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirTypeParameterCarrier
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirValueParameterCarrier
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
@@ -59,6 +61,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
|
||||
|
||||
@@ -102,6 +105,8 @@ internal abstract class IrCarrierDeserializer {
|
||||
|
||||
abstract fun deserializeModality(proto: Long): Modality
|
||||
|
||||
abstract fun deserializeInlineClassRepresentation(proto: ProtoIrInlineClassRepresentation): InlineClassRepresentation<IrSimpleType>
|
||||
|
||||
abstract fun deserializeIsExternalClass(proto: Long): Boolean
|
||||
|
||||
abstract fun deserializeIsExternalField(proto: Long): Boolean
|
||||
@@ -132,7 +137,8 @@ internal abstract class IrCarrierDeserializer {
|
||||
deserializeVisibility(proto.flags),
|
||||
deserializeModality(proto.flags),
|
||||
proto.typeParametersList.map { deserializeTypeParameter(it) },
|
||||
proto.superTypesList.map { deserializeSuperType(it) }
|
||||
proto.superTypesList.map { deserializeSuperType(it) },
|
||||
if (proto.hasInlineClassRepresentation()) deserializeInlineClassRepresentation(proto.inlineClassRepresentation) else null
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.ir.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructorCall as ProtoIrConstructorCall
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrInlineClassRepresentation as ProtoIrInlineClassRepresentation
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrVariable as ProtoIrVariable
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirAnonymousInitializerCarrier
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirClassCarrier
|
||||
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.PirTypeAliasCarri
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirTypeParameterCarrier
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.PirValueParameterCarrier
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
@@ -46,6 +48,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
// Auto-generated by compiler/ir/ir.tree.persistent/generator/src/org/jetbrains/kotlin/ir/persistentIrGenerator/Main.kt. DO NOT EDIT!
|
||||
@@ -88,6 +91,8 @@ internal abstract class IrCarrierSerializer {
|
||||
|
||||
abstract fun serializeModality(value: Modality): Long
|
||||
|
||||
abstract fun serializeInlineClassRepresentation(value: InlineClassRepresentation<IrSimpleType>): ProtoIrInlineClassRepresentation
|
||||
|
||||
abstract fun serializeIsExternalClass(value: Boolean): Long
|
||||
|
||||
abstract fun serializeIsExternalField(value: Boolean): Long
|
||||
@@ -116,6 +121,7 @@ internal abstract class IrCarrierSerializer {
|
||||
proto.setFlags(serializeVisibility(carrier.visibilityField) or serializeModality(carrier.modalityField))
|
||||
proto.addAllTypeParameters(carrier.typeParametersSymbolField.map { serializeTypeParameter(it) })
|
||||
proto.addAllSuperTypes(carrier.superTypesField.map { serializeSuperType(it) })
|
||||
carrier.inlineClassRepresentationField?.let { proto.setInlineClassRepresentation(serializeInlineClassRepresentation(it)) }
|
||||
return proto.build().toByteArray()
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -17,6 +17,11 @@ internal fun PersistentIrGenerator.generateClass() {
|
||||
)
|
||||
val superTypesField = Field("superTypes", +"List<" + import("IrType", "org.jetbrains.kotlin.ir.types") + ">", superTypeListProto)
|
||||
val modalityField = Field("modality", descriptorType("Modality"), modalityProto)
|
||||
val inlineClassRepresentationField = Field(
|
||||
"inlineClassRepresentation",
|
||||
descriptorType("InlineClassRepresentation") + "<" + import("IrSimpleType", "org.jetbrains.kotlin.ir.types") + ">?",
|
||||
inlineClassRepresentationProto
|
||||
)
|
||||
|
||||
writeFile("PersistentIrClass.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
|
||||
lines(
|
||||
@@ -72,6 +77,7 @@ internal fun PersistentIrGenerator.generateClass() {
|
||||
superTypesField.toPersistentField(+"emptyList()"),
|
||||
+"override var metadata: " + MetadataSource + "? = null",
|
||||
modalityField.toPersistentField(+"modality"),
|
||||
inlineClassRepresentationField.toPersistentField(+"null"),
|
||||
+"override var attributeOwnerId: " + IrAttributeContainer + " = this",
|
||||
),
|
||||
id,
|
||||
@@ -86,6 +92,7 @@ internal fun PersistentIrGenerator.generateClass() {
|
||||
modalityField,
|
||||
typeParametersField,
|
||||
superTypesField,
|
||||
inlineClassRepresentationField,
|
||||
)()
|
||||
})
|
||||
|
||||
@@ -96,5 +103,6 @@ internal fun PersistentIrGenerator.generateClass() {
|
||||
modalityField,
|
||||
typeParametersField,
|
||||
superTypesField,
|
||||
inlineClassRepresentationField,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -3,11 +3,11 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("MemberVisibilityCanBePrivate")
|
||||
|
||||
package org.jetbrains.kotlin.ir.persistentIrGenerator
|
||||
|
||||
import java.io.File
|
||||
import java.lang.IllegalStateException
|
||||
import java.lang.StringBuilder
|
||||
|
||||
internal interface R {
|
||||
fun text(t: String): R
|
||||
@@ -156,6 +156,11 @@ internal object PersistentIrGenerator {
|
||||
|
||||
val visibilityProto = Proto(null, "visibility", +"Long", DescriptorVisibility)
|
||||
val modalityProto = Proto(null, "modality", +"Long", descriptorType("Modality"))
|
||||
val inlineClassRepresentationProto = Proto(
|
||||
"IrInlineClassRepresentation", "inlineClassRepresentation",
|
||||
import("IrInlineClassRepresentation", protoPackage, "ProtoIrInlineClassRepresentation"),
|
||||
descriptorType("InlineClassRepresentation") + "<" + import("IrSimpleType", "org.jetbrains.kotlin.ir.types") + ">"
|
||||
)
|
||||
|
||||
val isExternalClassProto = Proto(null, "isExternalClass", +"Long", +"Boolean")
|
||||
val isExternalFieldProto = Proto(null, "isExternalField", +"Long", +"Boolean")
|
||||
@@ -180,6 +185,7 @@ internal object PersistentIrGenerator {
|
||||
variableProto,
|
||||
visibilityProto,
|
||||
modalityProto,
|
||||
inlineClassRepresentationProto,
|
||||
isExternalClassProto,
|
||||
isExternalFieldProto,
|
||||
isExternalFunctionProto,
|
||||
|
||||
+8
-3
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.ir.serialization
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFlags
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||
@@ -17,11 +17,12 @@ import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructorCall as ProtoIrConstructorCall
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrInlineClassRepresentation as ProtoIrInlineClassRepresentation
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrVariable as ProtoIrVariable
|
||||
|
||||
internal class IrCarrierDeserializerImpl(
|
||||
@@ -102,6 +103,10 @@ internal class IrCarrierDeserializerImpl(
|
||||
return ProtoEnumFlags.modality(IrFlags.MODALITY.get(proto.toInt()))
|
||||
}
|
||||
|
||||
override fun deserializeInlineClassRepresentation(proto: ProtoIrInlineClassRepresentation): InlineClassRepresentation<IrSimpleType> {
|
||||
return declarationDeserializer.deserializeInlineClassRepresentation(proto)
|
||||
}
|
||||
|
||||
override fun deserializeIsExternalClass(proto: Long): Boolean {
|
||||
return IrFlags.IS_EXTERNAL_CLASS.get(proto.toInt())
|
||||
}
|
||||
@@ -117,4 +122,4 @@ internal class IrCarrierDeserializerImpl(
|
||||
override fun deserializeIsExternalProperty(proto: Long): Boolean {
|
||||
return IrFlags.IS_EXTERNAL_PROPERTY.get(proto.toInt())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.serialization
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFlags
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
@@ -16,12 +17,13 @@ import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructorCall as ProtoIrConstructorCall
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrInlineClassRepresentation as ProtoIrInlineClassRepresentation
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrVariable as ProtoIrVariable
|
||||
|
||||
internal class IrCarrierSerializerImpl(val fileSerializer: IrFileSerializer, val bodyIndex: (IrBody) -> Int) : IrCarrierSerializer() {
|
||||
@@ -97,6 +99,10 @@ internal class IrCarrierSerializerImpl(val fileSerializer: IrFileSerializer, val
|
||||
return Flags.MODALITY.toFlags(ProtoEnumFlags.modality(value)).toLong()
|
||||
}
|
||||
|
||||
override fun serializeInlineClassRepresentation(value: InlineClassRepresentation<IrSimpleType>): ProtoIrInlineClassRepresentation {
|
||||
return fileSerializer.serializeInlineClassRepresentation(value)
|
||||
}
|
||||
|
||||
override fun serializeIsExternalClass(value: Boolean): Long {
|
||||
return IrFlags.IS_EXTERNAL_CLASS.toFlags(value).toLong()
|
||||
}
|
||||
@@ -112,4 +118,4 @@ internal class IrCarrierSerializerImpl(val fileSerializer: IrFileSerializer, val
|
||||
override fun serializeIsExternalProperty(value: Boolean): Long {
|
||||
return IrFlags.IS_EXTERNAL_PROPERTY.toFlags(value).toLong()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user