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 e18e4f32d0d..8869de34015 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 @@ -153,6 +153,10 @@ message IrEnumConstructorCall { required MemberAccessCommon member_access = 2; } +message IrGetClass { + required IrExpression argument = 1; +} + message IrGetEnumValue { required KotlinType type = 1; required KotlinDescriptor descriptor = 2; @@ -248,6 +252,7 @@ message IrOperation { IrDelegatingConstructorCall delegating_constructor_call = 7; IrDoWhile do_while = 25; IrEnumConstructorCall enum_constructor_call = 8; + IrGetClass get_class = 24; IrGetEnumValue get_enum_value = 9; IrGetField get_field = 10; IrGetValue get_value = 11; 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 76340fbe9a7..90db7a7ba41 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 @@ -270,6 +270,12 @@ internal class IrSerializer(val context: Context, return proto.build() } + fun serializeGetClass(expression: IrGetClass): KonanIr.IrGetClass { + val proto = KonanIr.IrGetClass.newBuilder() + .setArgument(serializeExpression(expression.argument)) + return proto.build() + } + fun serializeGetEnumValue(expression: IrGetEnumValue): KonanIr.IrGetEnumValue { val proto = KonanIr.IrGetEnumValue.newBuilder() .setType(serializeKotlinType(expression.type)) @@ -472,6 +478,7 @@ internal class IrSerializer(val context: Context, is IrDelegatingConstructorCall -> operationProto.setDelegatingConstructorCall(serializeDelegatingConstructorCall(expression)) is IrDoWhileLoop -> operationProto.setDoWhile(serializeDoWhile(expression)) + is IrGetClass -> operationProto.setGetClass(serializeGetClass(expression)) is IrGetField -> operationProto.setGetField(serializeGetField(expression)) is IrGetValue -> operationProto.setGetValue(serializeGetValue(expression)) is IrGetEnumValue @@ -851,6 +858,11 @@ internal class IrDeserializer(val context: Context, return call } + fun deserializeGetClass(proto: KonanIr.IrGetClass, start: Int, end: Int, type: KotlinType): IrGetClass { + val argument = deserializeExpression(proto.argument) + return IrGetClassImpl(start, end, type, argument) + } + fun deserializeGetField(proto: KonanIr.IrGetField, start: Int, end: Int): IrGetField { val access = proto.fieldAccess val descriptor = deserializeDescriptor(access.getDescriptor()) as PropertyDescriptor @@ -1082,6 +1094,8 @@ internal class IrDeserializer(val context: Context, -> deserializeDoWhile(proto.doWhile, start, end, type) GET_ENUM_VALUE -> deserializeGetEnumValue(proto.getEnumValue, start, end) + GET_CLASS + -> deserializeGetClass(proto.getClass, start, end, type) GET_FIELD -> deserializeGetField(proto.getField, start, end) GET_OBJECT