IrClassReference support in virtualization.
This commit is contained in:
committed by
KonstantinAnisimov
parent
5ca5923b9a
commit
4a0be88d47
+6
@@ -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;
|
||||
|
||||
+15
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user