IrGetClass serialization/deserialization.

This commit is contained in:
Alexander Gorshenev
2017-11-10 16:41:13 +03:00
committed by KonstantinAnisimov
parent 9a922c6947
commit 5ca5923b9a
2 changed files with 19 additions and 0 deletions
@@ -153,6 +153,10 @@ message IrEnumConstructorCall {
required MemberAccessCommon member_access = 2; required MemberAccessCommon member_access = 2;
} }
message IrGetClass {
required IrExpression argument = 1;
}
message IrGetEnumValue { message IrGetEnumValue {
required KotlinType type = 1; required KotlinType type = 1;
required KotlinDescriptor descriptor = 2; required KotlinDescriptor descriptor = 2;
@@ -248,6 +252,7 @@ message IrOperation {
IrDelegatingConstructorCall delegating_constructor_call = 7; IrDelegatingConstructorCall delegating_constructor_call = 7;
IrDoWhile do_while = 25; IrDoWhile do_while = 25;
IrEnumConstructorCall enum_constructor_call = 8; IrEnumConstructorCall enum_constructor_call = 8;
IrGetClass get_class = 24;
IrGetEnumValue get_enum_value = 9; IrGetEnumValue get_enum_value = 9;
IrGetField get_field = 10; IrGetField get_field = 10;
IrGetValue get_value = 11; IrGetValue get_value = 11;
@@ -270,6 +270,12 @@ internal class IrSerializer(val context: Context,
return proto.build() 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 { fun serializeGetEnumValue(expression: IrGetEnumValue): KonanIr.IrGetEnumValue {
val proto = KonanIr.IrGetEnumValue.newBuilder() val proto = KonanIr.IrGetEnumValue.newBuilder()
.setType(serializeKotlinType(expression.type)) .setType(serializeKotlinType(expression.type))
@@ -472,6 +478,7 @@ internal class IrSerializer(val context: Context,
is IrDelegatingConstructorCall is IrDelegatingConstructorCall
-> operationProto.setDelegatingConstructorCall(serializeDelegatingConstructorCall(expression)) -> operationProto.setDelegatingConstructorCall(serializeDelegatingConstructorCall(expression))
is IrDoWhileLoop -> operationProto.setDoWhile(serializeDoWhile(expression)) is IrDoWhileLoop -> operationProto.setDoWhile(serializeDoWhile(expression))
is IrGetClass -> operationProto.setGetClass(serializeGetClass(expression))
is IrGetField -> operationProto.setGetField(serializeGetField(expression)) is IrGetField -> operationProto.setGetField(serializeGetField(expression))
is IrGetValue -> operationProto.setGetValue(serializeGetValue(expression)) is IrGetValue -> operationProto.setGetValue(serializeGetValue(expression))
is IrGetEnumValue is IrGetEnumValue
@@ -851,6 +858,11 @@ internal class IrDeserializer(val context: Context,
return call 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 { fun deserializeGetField(proto: KonanIr.IrGetField, start: Int, end: Int): IrGetField {
val access = proto.fieldAccess val access = proto.fieldAccess
val descriptor = deserializeDescriptor(access.getDescriptor()) as PropertyDescriptor val descriptor = deserializeDescriptor(access.getDescriptor()) as PropertyDescriptor
@@ -1082,6 +1094,8 @@ internal class IrDeserializer(val context: Context,
-> deserializeDoWhile(proto.doWhile, start, end, type) -> deserializeDoWhile(proto.doWhile, start, end, type)
GET_ENUM_VALUE GET_ENUM_VALUE
-> deserializeGetEnumValue(proto.getEnumValue, start, end) -> deserializeGetEnumValue(proto.getEnumValue, start, end)
GET_CLASS
-> deserializeGetClass(proto.getClass, start, end, type)
GET_FIELD GET_FIELD
-> deserializeGetField(proto.getField, start, end) -> deserializeGetField(proto.getField, start, end)
GET_OBJECT GET_OBJECT