From f63862e98dc39cde0862e5d0385edfb9c977f955 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Thu, 30 Mar 2017 13:45:47 +0300 Subject: [PATCH] Added correspondingClass support in enum serialization. --- .../backend/konan/serialization/KonanIr.proto | 1 + .../backend/konan/serialization/SerializeIr.kt | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) 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 7de0e17f87e..d434ce8b27c 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 @@ -253,6 +253,7 @@ message IrClass { message IrEnumEntry { optional IrExpression initializer = 1; + optional IrDeclaration corresponding_class = 2; } message IrDeclarator { 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 aa01e8200ff..198466d821a 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 @@ -493,6 +493,10 @@ internal class IrSerializer(val context: Context, if (initializer != null) { proto.setInitializer(serializeExpression(initializer)) } + val correspondingClass = enumEntry.correspondingClass + if (correspondingClass != null) { + proto.setCorrespondingClass(serializeDeclaration(correspondingClass)) + } return proto.build() } @@ -984,9 +988,12 @@ internal class IrDeserializer(val context: Context, start: Int, end: Int, origin: IrDeclarationOrigin): IrEnumEntry { val enumEntry = IrEnumEntryImpl(start, end, origin, descriptor) - // TODO: we need to pass down the enclosing declaration. - //enumEntry.correspondingClass = ??? - enumEntry.initializerExpression = deserializeExpression(proto.initializer) + if (proto.hasCorrespondingClass()) { + enumEntry.correspondingClass = deserializeDeclaration(proto.correspondingClass) as IrClass + } + if (proto.hasInitializer()) { + enumEntry.initializerExpression = deserializeExpression(proto.initializer) + } return enumEntry }