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;
|
required TypeMap type_map = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
message IrComposite {
|
message IrComposite {
|
||||||
repeated IrStatement statement = 1;
|
repeated IrStatement statement = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message IrClassReference {
|
||||||
|
required KotlinDescriptor class_descriptor = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message IrConst {
|
message IrConst {
|
||||||
oneof value {
|
oneof value {
|
||||||
bool null = 1;
|
bool null = 1;
|
||||||
@@ -246,6 +251,7 @@ message IrOperation {
|
|||||||
IrBreak break = 2;
|
IrBreak break = 2;
|
||||||
IrCall call = 3;
|
IrCall call = 3;
|
||||||
IrCallableReference callable_reference = 4;
|
IrCallableReference callable_reference = 4;
|
||||||
|
IrClassReference class_reference = 25;
|
||||||
IrConst const = 5;
|
IrConst const = 5;
|
||||||
IrComposite composite = 26;
|
IrComposite composite = 26;
|
||||||
IrContinue continue = 6;
|
IrContinue continue = 6;
|
||||||
|
|||||||
+15
@@ -230,6 +230,12 @@ internal class IrSerializer(val context: Context,
|
|||||||
return proto.build()
|
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 {
|
fun serializeConst(value: IrConst<*>): KonanIr.IrConst {
|
||||||
val proto = KonanIr.IrConst.newBuilder()
|
val proto = KonanIr.IrConst.newBuilder()
|
||||||
when (value.kind) {
|
when (value.kind) {
|
||||||
@@ -469,6 +475,8 @@ internal class IrSerializer(val context: Context,
|
|||||||
when (expression) {
|
when (expression) {
|
||||||
is IrBlock -> operationProto.setBlock(serializeBlock(expression))
|
is IrBlock -> operationProto.setBlock(serializeBlock(expression))
|
||||||
is IrBreak -> operationProto.setBreak(serializeBreak(expression))
|
is IrBreak -> operationProto.setBreak(serializeBreak(expression))
|
||||||
|
is IrClassReference
|
||||||
|
-> operationProto.setClassReference(serializeClassReference(expression))
|
||||||
is IrCall -> operationProto.setCall(serializeCall(expression))
|
is IrCall -> operationProto.setCall(serializeCall(expression))
|
||||||
is IrCallableReference
|
is IrCallableReference
|
||||||
-> operationProto.setCallableReference(serializeCallableReference(expression))
|
-> 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 {
|
fun deserializeCall(proto: KonanIr.IrCall, start: Int, end: Int, type: KotlinType): IrCall {
|
||||||
val descriptor = deserializeDescriptor(proto.getDescriptor()) as FunctionDescriptor
|
val descriptor = deserializeDescriptor(proto.getDescriptor()) as FunctionDescriptor
|
||||||
|
|
||||||
@@ -1078,6 +1091,8 @@ internal class IrDeserializer(val context: Context,
|
|||||||
-> deserializeBlock(proto.block, start, end, type)
|
-> deserializeBlock(proto.block, start, end, type)
|
||||||
BREAK
|
BREAK
|
||||||
-> deserializeBreak(proto.getBreak(), start, end, type)
|
-> deserializeBreak(proto.getBreak(), start, end, type)
|
||||||
|
CLASS_REFERENCE
|
||||||
|
-> deserializeClassReference(proto.classReference, start, end, type)
|
||||||
CALL
|
CALL
|
||||||
-> deserializeCall(proto.call, start, end, type)
|
-> deserializeCall(proto.call, start, end, type)
|
||||||
CALLABLE_REFERENCE
|
CALLABLE_REFERENCE
|
||||||
|
|||||||
Reference in New Issue
Block a user