diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto index 8869de34015..c8fd37dc5d8 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto @@ -115,10 +115,15 @@ message IrCallableReference { required TypeMap type_map = 2; } + message IrComposite { repeated IrStatement statement = 1; } +message IrClassReference { + required KotlinDescriptor class_descriptor = 1; +} + message IrConst { oneof value { bool null = 1; @@ -246,6 +251,7 @@ message IrOperation { IrBreak break = 2; IrCall call = 3; IrCallableReference callable_reference = 4; + IrClassReference class_reference = 25; IrConst const = 5; IrComposite composite = 26; IrContinue continue = 6; diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt index 90db7a7ba41..8ffd3f81f7d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt @@ -230,6 +230,12 @@ internal class IrSerializer(val context: Context, return proto.build() } + fun serializeClassReference(expression: IrClassReference): KonanIr.IrClassReference { + val proto = KonanIr.IrClassReference.newBuilder() + .setClassDescriptor(serializeDescriptor(expression.symbol.descriptor)) + return proto.build() + } + fun serializeConst(value: IrConst<*>): KonanIr.IrConst { val proto = KonanIr.IrConst.newBuilder() when (value.kind) { @@ -469,6 +475,8 @@ internal class IrSerializer(val context: Context, when (expression) { is IrBlock -> operationProto.setBlock(serializeBlock(expression)) is IrBreak -> operationProto.setBreak(serializeBreak(expression)) + is IrClassReference + -> operationProto.setClassReference(serializeClassReference(expression)) is IrCall -> operationProto.setCall(serializeCall(expression)) is IrCallableReference -> operationProto.setCallableReference(serializeCallableReference(expression)) @@ -796,6 +804,11 @@ internal class IrDeserializer(val context: Context, } } + fun deserializeClassReference(proto: KonanIr.IrClassReference, start: Int, end: Int, type: KotlinType): IrClassReference { + val descriptor = deserializeDescriptor(proto.classDescriptor) as ClassifierDescriptor + return IrClassReferenceImpl(start, end, type, descriptor) + } + fun deserializeCall(proto: KonanIr.IrCall, start: Int, end: Int, type: KotlinType): IrCall { val descriptor = deserializeDescriptor(proto.getDescriptor()) as FunctionDescriptor @@ -1078,6 +1091,8 @@ internal class IrDeserializer(val context: Context, -> deserializeBlock(proto.block, start, end, type) BREAK -> deserializeBreak(proto.getBreak(), start, end, type) + CLASS_REFERENCE + -> deserializeClassReference(proto.classReference, start, end, type) CALL -> deserializeCall(proto.call, start, end, type) CALLABLE_REFERENCE