Made IrStatementOrigin serialization field optional for all statements

This commit is contained in:
Alexander Gorshenev
2019-04-26 18:59:42 +03:00
committed by alexander-gorshenev
parent 85f85fb3e8
commit 2c026114ae
4 changed files with 383 additions and 433 deletions
@@ -125,7 +125,6 @@ enum IrSymbolKind {
TYPE_PARAMETER_SYMBOL = 8; TYPE_PARAMETER_SYMBOL = 8;
VARIABLE_SYMBOL = 9; VARIABLE_SYMBOL = 9;
ANONYMOUS_INIT_SYMBOL = 10; ANONYMOUS_INIT_SYMBOL = 10;
STANDALONE_FIELD_SYMBOL = 11; // For fields without properties. WrappedFieldDescriptor, rather than WrappedPropertyDescriptor. STANDALONE_FIELD_SYMBOL = 11; // For fields without properties. WrappedFieldDescriptor, rather than WrappedPropertyDescriptor.
RECEIVER_PARAMETER_SYMBOL = 12; // ReceiverParameterDescriptor rather than ValueParameterDescriptor. RECEIVER_PARAMETER_SYMBOL = 12; // ReceiverParameterDescriptor rather than ValueParameterDescriptor.
} }
@@ -217,7 +216,7 @@ message IrBreak {
} }
message IrBlock { message IrBlock {
required IrStatementOrigin origin = 1; optional IrStatementOrigin origin = 1;
repeated IrStatement statement = 2; repeated IrStatement statement = 2;
} }
@@ -238,7 +237,7 @@ message IrCall {
required IrSymbol symbol = 2; required IrSymbol symbol = 2;
required MemberAccessCommon member_access = 3; required MemberAccessCommon member_access = 3;
optional IrSymbol super = 4; optional IrSymbol super = 4;
required IrStatementOrigin origin = 5; optional IrStatementOrigin origin = 5;
} }
message IrConstructorCall { message IrConstructorCall {
@@ -249,7 +248,7 @@ message IrConstructorCall {
message IrFunctionReference { message IrFunctionReference {
required IrSymbol symbol = 1; required IrSymbol symbol = 1;
required IrStatementOrigin origin = 2; optional IrStatementOrigin origin = 2;
required MemberAccessCommon member_access = 3; required MemberAccessCommon member_access = 3;
} }
@@ -258,21 +257,21 @@ message IrLocalDelegatedPropertyReference {
optional IrSymbol getter = 2; optional IrSymbol getter = 2;
optional IrSymbol setter = 3; optional IrSymbol setter = 3;
required IrSymbol symbol = 4; required IrSymbol symbol = 4;
required IrStatementOrigin origin = 5; optional IrStatementOrigin origin = 5;
} }
message IrPropertyReference { message IrPropertyReference {
optional IrSymbol field = 1; optional IrSymbol field = 1;
optional IrSymbol getter = 2; optional IrSymbol getter = 2;
optional IrSymbol setter = 3; optional IrSymbol setter = 3;
required IrStatementOrigin origin = 4; optional IrStatementOrigin origin = 4;
required MemberAccessCommon member_access = 5; required MemberAccessCommon member_access = 5;
optional DescriptorReference descriptor_reference = 6; // IrProperty doesn't have a symbol at all. Preserve this rudiment for now. optional DescriptorReference descriptor_reference = 6; // IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
} }
message IrComposite { message IrComposite {
repeated IrStatement statement = 1; repeated IrStatement statement = 1;
required IrStatementOrigin origin = 2; optional IrStatementOrigin origin = 2;
} }
message IrClassReference { message IrClassReference {
@@ -330,12 +329,12 @@ message FieldAccessCommon {
message IrGetField { message IrGetField {
required FieldAccessCommon field_access = 1; required FieldAccessCommon field_access = 1;
required IrStatementOrigin origin = 2; optional IrStatementOrigin origin = 2;
} }
message IrGetValue { message IrGetValue {
required IrSymbol symbol = 1; required IrSymbol symbol = 1;
required IrStatementOrigin origin = 2; optional IrStatementOrigin origin = 2;
} }
message IrGetObject { message IrGetObject {
@@ -351,7 +350,7 @@ message Loop {
required IrExpression condition = 2; required IrExpression condition = 2;
optional String label = 3; optional String label = 3;
optional IrExpression body = 4; optional IrExpression body = 4;
required IrStatementOrigin origin = 5; optional IrStatementOrigin origin = 5;
} }
message IrReturn { message IrReturn {
@@ -362,13 +361,13 @@ message IrReturn {
message IrSetField { message IrSetField {
required FieldAccessCommon field_access = 1; required FieldAccessCommon field_access = 1;
required IrExpression value = 2; required IrExpression value = 2;
required IrStatementOrigin origin = 3; optional IrStatementOrigin origin = 3;
} }
message IrSetVariable { message IrSetVariable {
required IrSymbol symbol = 1; required IrSymbol symbol = 1;
required IrExpression value = 2; required IrExpression value = 2;
required IrStatementOrigin origin = 3; optional IrStatementOrigin origin = 3;
} }
message IrSpreadElement { message IrSpreadElement {
@@ -410,7 +409,7 @@ message IrVarargElement {
message IrWhen { message IrWhen {
repeated IrStatement branch = 1; repeated IrStatement branch = 1;
required IrStatementOrigin origin = 2; optional IrStatementOrigin origin = 2;
} }
message IrWhile { message IrWhile {
@@ -201,7 +201,7 @@ abstract class IrModuleDeserializer(
private fun deserializeBlock(proto: KotlinIr.IrBlock, start: Int, end: Int, type: IrType): IrBlock { private fun deserializeBlock(proto: KotlinIr.IrBlock, start: Int, end: Int, type: IrType): IrBlock {
val statements = mutableListOf<IrStatement>() val statements = mutableListOf<IrStatement>()
val statementProtos = proto.statementList val statementProtos = proto.statementList
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
statementProtos.forEach { statementProtos.forEach {
statements.add(deserializeStatement(it) as IrStatement) statements.add(deserializeStatement(it) as IrStatement)
@@ -263,7 +263,7 @@ abstract class IrModuleDeserializer(
deserializeIrSymbol(proto.`super`) as IrClassSymbol deserializeIrSymbol(proto.`super`) as IrClassSymbol
} else null } else null
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
val call: IrCall = when (proto.kind) { val call: IrCall = when (proto.kind) {
KotlinIr.IrCall.Primitive.NOT_PRIMITIVE -> KotlinIr.IrCall.Primitive.NOT_PRIMITIVE ->
@@ -289,7 +289,7 @@ abstract class IrModuleDeserializer(
private fun deserializeComposite(proto: KotlinIr.IrComposite, start: Int, end: Int, type: IrType): IrComposite { private fun deserializeComposite(proto: KotlinIr.IrComposite, start: Int, end: Int, type: IrType): IrComposite {
val statements = mutableListOf<IrStatement>() val statements = mutableListOf<IrStatement>()
val statementProtos = proto.statementList val statementProtos = proto.statementList
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
statementProtos.forEach { statementProtos.forEach {
statements.add(deserializeStatement(it) as IrStatement) statements.add(deserializeStatement(it) as IrStatement)
@@ -344,7 +344,7 @@ abstract class IrModuleDeserializer(
): IrFunctionReference { ): IrFunctionReference {
val symbol = deserializeIrSymbol(proto.symbol) as IrFunctionSymbol val symbol = deserializeIrSymbol(proto.symbol) as IrFunctionSymbol
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
val callable = IrFunctionReferenceImpl( val callable = IrFunctionReferenceImpl(
start, start,
end, end,
@@ -368,7 +368,7 @@ abstract class IrModuleDeserializer(
private fun deserializeGetField(proto: KotlinIr.IrGetField, start: Int, end: Int, type: IrType): IrGetField { private fun deserializeGetField(proto: KotlinIr.IrGetField, start: Int, end: Int, type: IrType): IrGetField {
val access = proto.fieldAccess val access = proto.fieldAccess
val symbol = deserializeIrSymbol(access.symbol) as IrFieldSymbol val symbol = deserializeIrSymbol(access.symbol) as IrFieldSymbol
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
val superQualifier = if (access.hasSuper()) { val superQualifier = if (access.hasSuper()) {
deserializeIrSymbol(access.symbol) as IrClassSymbol deserializeIrSymbol(access.symbol) as IrClassSymbol
@@ -382,7 +382,7 @@ abstract class IrModuleDeserializer(
private fun deserializeGetValue(proto: KotlinIr.IrGetValue, start: Int, end: Int, type: IrType): IrGetValue { private fun deserializeGetValue(proto: KotlinIr.IrGetValue, start: Int, end: Int, type: IrType): IrGetValue {
val symbol = deserializeIrSymbol(proto.symbol) as IrValueSymbol val symbol = deserializeIrSymbol(proto.symbol) as IrValueSymbol
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
// TODO: origin! // TODO: origin!
return IrGetValueImpl(start, end, type, symbol, origin) return IrGetValueImpl(start, end, type, symbol, origin)
} }
@@ -427,7 +427,7 @@ abstract class IrModuleDeserializer(
val getter = deserializeIrSymbol(proto.getter) as IrSimpleFunctionSymbol val getter = deserializeIrSymbol(proto.getter) as IrSimpleFunctionSymbol
val setter = if (proto.hasSetter()) deserializeIrSymbol(proto.setter) as IrSimpleFunctionSymbol else null val setter = if (proto.hasSetter()) deserializeIrSymbol(proto.setter) as IrSimpleFunctionSymbol else null
val symbol = deserializeIrSymbol(proto.symbol) as IrLocalDelegatedPropertySymbol val symbol = deserializeIrSymbol(proto.symbol) as IrLocalDelegatedPropertySymbol
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
return IrLocalDelegatedPropertyReferenceImpl( return IrLocalDelegatedPropertyReferenceImpl(
start, end, type, start, end, type,
@@ -449,7 +449,7 @@ abstract class IrModuleDeserializer(
val field = if (proto.hasField()) deserializeIrSymbol(proto.field) as IrFieldSymbol else null val field = if (proto.hasField()) deserializeIrSymbol(proto.field) as IrFieldSymbol else null
val getter = if (proto.hasGetter()) deserializeIrSymbol(proto.getter) as IrSimpleFunctionSymbol else null val getter = if (proto.hasGetter()) deserializeIrSymbol(proto.getter) as IrSimpleFunctionSymbol else null
val setter = if (proto.hasSetter()) deserializeIrSymbol(proto.setter) as IrSimpleFunctionSymbol else null val setter = if (proto.hasSetter()) deserializeIrSymbol(proto.setter) as IrSimpleFunctionSymbol else null
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
val descriptor = val descriptor =
if (proto.hasDescriptorReference()) if (proto.hasDescriptorReference())
@@ -487,7 +487,7 @@ abstract class IrModuleDeserializer(
deserializeExpression(access.receiver) deserializeExpression(access.receiver)
} else null } else null
val value = deserializeExpression(proto.value) val value = deserializeExpression(proto.value)
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
return IrSetFieldImpl(start, end, symbol, receiver, value, builtIns.unitType, origin, superQualifier) return IrSetFieldImpl(start, end, symbol, receiver, value, builtIns.unitType, origin, superQualifier)
} }
@@ -495,7 +495,7 @@ abstract class IrModuleDeserializer(
private fun deserializeSetVariable(proto: KotlinIr.IrSetVariable, start: Int, end: Int): IrSetVariable { private fun deserializeSetVariable(proto: KotlinIr.IrSetVariable, start: Int, end: Int): IrSetVariable {
val symbol = deserializeIrSymbol(proto.symbol) as IrVariableSymbol val symbol = deserializeIrSymbol(proto.symbol) as IrVariableSymbol
val value = deserializeExpression(proto.value) val value = deserializeExpression(proto.value)
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
return IrSetVariableImpl(start, end, builtIns.unitType, symbol, value, origin) return IrSetVariableImpl(start, end, builtIns.unitType, symbol, value, origin)
} }
@@ -588,7 +588,7 @@ abstract class IrModuleDeserializer(
private fun deserializeWhen(proto: KotlinIr.IrWhen, start: Int, end: Int, type: IrType): IrWhen { private fun deserializeWhen(proto: KotlinIr.IrWhen, start: Int, end: Int, type: IrType): IrWhen {
val branches = mutableListOf<IrBranch>() val branches = mutableListOf<IrBranch>()
val origin = deserializeIrStatementOrigin(proto.origin) val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
proto.branchList.forEach { proto.branchList.forEach {
branches.add(deserializeStatement(it) as IrBranch) branches.add(deserializeStatement(it) as IrBranch)
@@ -614,13 +614,13 @@ abstract class IrModuleDeserializer(
// IrBreak statements have something to put into 'loop' field. // IrBreak statements have something to put into 'loop' field.
private fun deserializeDoWhile(proto: KotlinIr.IrDoWhile, start: Int, end: Int, type: IrType) = private fun deserializeDoWhile(proto: KotlinIr.IrDoWhile, start: Int, end: Int, type: IrType) =
deserializeLoop(proto.loop, deserializeLoopHeader(proto.loop.loopId) { deserializeLoop(proto.loop, deserializeLoopHeader(proto.loop.loopId) {
val origin = deserializeIrStatementOrigin(proto.loop.origin) val origin = if (proto.loop.hasOrigin()) deserializeIrStatementOrigin(proto.loop.origin) else null
IrDoWhileLoopImpl(start, end, type, origin) IrDoWhileLoopImpl(start, end, type, origin)
}) })
private fun deserializeWhile(proto: KotlinIr.IrWhile, start: Int, end: Int, type: IrType) = private fun deserializeWhile(proto: KotlinIr.IrWhile, start: Int, end: Int, type: IrType) =
deserializeLoop(proto.loop, deserializeLoopHeader(proto.loop.loopId) { deserializeLoop(proto.loop, deserializeLoopHeader(proto.loop.loopId) {
val origin = deserializeIrStatementOrigin(proto.loop.origin) val origin = if (proto.loop.hasOrigin()) deserializeIrStatementOrigin(proto.loop.origin) else null
IrWhileLoopImpl(start, end, type, origin) IrWhileLoopImpl(start, end, type, origin)
}) })
@@ -1249,11 +1249,10 @@ abstract class IrModuleDeserializer(
val statementOriginIndex = val statementOriginIndex =
allKnownStatementOrigins.map { it.objectInstance as? IrStatementOriginImpl }.filterNotNull().associateBy { it.debugName } allKnownStatementOrigins.map { it.objectInstance as? IrStatementOriginImpl }.filterNotNull().associateBy { it.debugName }
fun deserializeIrStatementOrigin(proto: KotlinIr.IrStatementOrigin): IrStatementOrigin? { fun deserializeIrStatementOrigin(proto: KotlinIr.IrStatementOrigin): IrStatementOrigin {
return deserializeString(proto.name).let { return deserializeString(proto.name).let {
val componentPrefix = "COMPONENT_" val componentPrefix = "COMPONENT_"
when { when {
it == "" -> null
it.startsWith(componentPrefix) -> { it.startsWith(componentPrefix) -> {
IrStatementOrigin.COMPONENT_N.withIndex(it.removePrefix(componentPrefix).toInt()) IrStatementOrigin.COMPONENT_N.withIndex(it.removePrefix(componentPrefix).toInt())
} }
@@ -61,10 +61,9 @@ open class IrModuleSerializer(
.setCustom(serializeString((origin as IrDeclarationOriginImpl).name)) .setCustom(serializeString((origin as IrDeclarationOriginImpl).name))
.build() .build()
private fun serializeIrStatementOrigin(origin: IrStatementOrigin?) = private fun serializeIrStatementOrigin(origin: IrStatementOrigin) =
KotlinIr.IrStatementOrigin.newBuilder() KotlinIr.IrStatementOrigin.newBuilder()
//.setName(serializeString((origin as IrStatementOriginImpl).debugName)) .setName(serializeString((origin as IrStatementOriginImpl).debugName))
.setName(serializeString((origin as IrStatementOriginImpl?)?.debugName ?: ""))
.build() .build()
private fun serializeVisibility(visibility: Visibility) = private fun serializeVisibility(visibility: Visibility) =
@@ -297,13 +296,6 @@ open class IrModuleSerializer(
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
private fun serializeStatementOrigin(origin: IrStatementOrigin?): KotlinIr.IrStatementOrigin {
require(origin is IrStatementOriginImpl?)
return KotlinIr.IrStatementOrigin.newBuilder()
.setName(serializeString(origin?.debugName ?: ""))
.build()
}
private fun serializeBlockBody(expression: IrBlockBody): KotlinIr.IrBlockBody { private fun serializeBlockBody(expression: IrBlockBody): KotlinIr.IrBlockBody {
val proto = KotlinIr.IrBlockBody.newBuilder() val proto = KotlinIr.IrBlockBody.newBuilder()
expression.statements.forEach { expression.statements.forEach {
@@ -323,7 +315,8 @@ open class IrModuleSerializer(
private fun serializeBlock(block: IrBlock): KotlinIr.IrBlock { private fun serializeBlock(block: IrBlock): KotlinIr.IrBlock {
val proto = KotlinIr.IrBlock.newBuilder() val proto = KotlinIr.IrBlock.newBuilder()
.setOrigin(serializeIrStatementOrigin(block.origin))
block.origin?.let { proto.setOrigin(serializeIrStatementOrigin(it)) }
block.statements.forEach { block.statements.forEach {
proto.addStatement(serializeStatement(it)) proto.addStatement(serializeStatement(it))
@@ -333,7 +326,8 @@ open class IrModuleSerializer(
private fun serializeComposite(composite: IrComposite): KotlinIr.IrComposite { private fun serializeComposite(composite: IrComposite): KotlinIr.IrComposite {
val proto = KotlinIr.IrComposite.newBuilder() val proto = KotlinIr.IrComposite.newBuilder()
.setOrigin(serializeIrStatementOrigin(composite.origin))
composite.origin?.let { proto.setOrigin(serializeIrStatementOrigin(it)) }
composite.statements.forEach { composite.statements.forEach {
proto.addStatement(serializeStatement(it)) proto.addStatement(serializeStatement(it))
} }
@@ -397,7 +391,7 @@ open class IrModuleSerializer(
val proto = KotlinIr.IrCall.newBuilder() val proto = KotlinIr.IrCall.newBuilder()
proto.kind = irCallToPrimitiveKind(call) proto.kind = irCallToPrimitiveKind(call)
proto.symbol = serializeIrSymbol(call.symbol) proto.symbol = serializeIrSymbol(call.symbol)
proto.origin = serializeStatementOrigin(call.origin) call.origin?.let { proto.origin = serializeIrStatementOrigin(it) }
call.superQualifierSymbol?.let { call.superQualifierSymbol?.let {
proto.`super` = serializeIrSymbol(it) proto.`super` = serializeIrSymbol(it)
@@ -418,8 +412,8 @@ open class IrModuleSerializer(
val proto = KotlinIr.IrFunctionReference.newBuilder() val proto = KotlinIr.IrFunctionReference.newBuilder()
.setSymbol(serializeIrSymbol(callable.symbol)) .setSymbol(serializeIrSymbol(callable.symbol))
.setMemberAccess(serializeMemberAccessCommon(callable)) .setMemberAccess(serializeMemberAccessCommon(callable))
.setOrigin(serializeIrStatementOrigin(callable.origin))
callable.origin?.let { proto.setOrigin(serializeIrStatementOrigin(it)) }
return proto.build() return proto.build()
} }
@@ -430,8 +424,8 @@ open class IrModuleSerializer(
.setDelegate(serializeIrSymbol(callable.delegate)) .setDelegate(serializeIrSymbol(callable.delegate))
.setGetter(serializeIrSymbol(callable.getter)) .setGetter(serializeIrSymbol(callable.getter))
.setSymbol(serializeIrSymbol(callable.symbol)) .setSymbol(serializeIrSymbol(callable.symbol))
.setOrigin(serializeIrStatementOrigin(callable.origin))
callable.origin?.let { proto.setOrigin(serializeIrStatementOrigin(it)) }
callable.setter?.let { proto.setSetter(serializeIrSymbol(it)) } callable.setter?.let { proto.setSetter(serializeIrSymbol(it)) }
return proto.build() return proto.build()
@@ -440,7 +434,7 @@ open class IrModuleSerializer(
private fun serializePropertyReference(callable: IrPropertyReference): KotlinIr.IrPropertyReference { private fun serializePropertyReference(callable: IrPropertyReference): KotlinIr.IrPropertyReference {
val proto = KotlinIr.IrPropertyReference.newBuilder() val proto = KotlinIr.IrPropertyReference.newBuilder()
.setMemberAccess(serializeMemberAccessCommon(callable)) .setMemberAccess(serializeMemberAccessCommon(callable))
.setOrigin(serializeIrStatementOrigin(callable.origin)) callable.origin?.let { proto.origin = serializeIrStatementOrigin(it) }
callable.field?.let { proto.field = serializeIrSymbol(it) } callable.field?.let { proto.field = serializeIrSymbol(it) }
callable.getter?.let { proto.getter = serializeIrSymbol(it) } callable.getter?.let { proto.getter = serializeIrSymbol(it) }
callable.setter?.let { proto.setter = serializeIrSymbol(it) } callable.setter?.let { proto.setter = serializeIrSymbol(it) }
@@ -515,14 +509,16 @@ open class IrModuleSerializer(
private fun serializeGetField(expression: IrGetField): KotlinIr.IrGetField = private fun serializeGetField(expression: IrGetField): KotlinIr.IrGetField =
KotlinIr.IrGetField.newBuilder() KotlinIr.IrGetField.newBuilder()
.setFieldAccess(serializeFieldAccessCommon(expression)) .setFieldAccess(serializeFieldAccessCommon(expression)).apply {
.setOrigin(serializeIrStatementOrigin(expression.origin)) expression.origin?.let { setOrigin(serializeIrStatementOrigin(it)) }
}
.build() .build()
private fun serializeGetValue(expression: IrGetValue): KotlinIr.IrGetValue = private fun serializeGetValue(expression: IrGetValue): KotlinIr.IrGetValue =
KotlinIr.IrGetValue.newBuilder() KotlinIr.IrGetValue.newBuilder()
.setSymbol(serializeIrSymbol(expression.symbol)) .setSymbol(serializeIrSymbol(expression.symbol)).apply {
.setOrigin(serializeIrStatementOrigin(expression.origin)) expression.origin?.let { setOrigin(serializeIrStatementOrigin(it)) }
}
.build() .build()
private fun serializeGetObject(expression: IrGetObjectValue): KotlinIr.IrGetObject { private fun serializeGetObject(expression: IrGetObjectValue): KotlinIr.IrGetObject {
@@ -549,15 +545,17 @@ open class IrModuleSerializer(
private fun serializeSetField(expression: IrSetField): KotlinIr.IrSetField = private fun serializeSetField(expression: IrSetField): KotlinIr.IrSetField =
KotlinIr.IrSetField.newBuilder() KotlinIr.IrSetField.newBuilder()
.setFieldAccess(serializeFieldAccessCommon(expression)) .setFieldAccess(serializeFieldAccessCommon(expression))
.setValue(serializeExpression(expression.value)) .setValue(serializeExpression(expression.value)).apply {
.setOrigin(serializeIrStatementOrigin(expression.origin)) expression.origin?.let{ setOrigin(serializeIrStatementOrigin(it)) }
}
.build() .build()
private fun serializeSetVariable(expression: IrSetVariable): KotlinIr.IrSetVariable = private fun serializeSetVariable(expression: IrSetVariable): KotlinIr.IrSetVariable =
KotlinIr.IrSetVariable.newBuilder() KotlinIr.IrSetVariable.newBuilder()
.setSymbol(serializeIrSymbol(expression.symbol)) .setSymbol(serializeIrSymbol(expression.symbol))
.setValue(serializeExpression(expression.value)) .setValue(serializeExpression(expression.value)).apply {
.setOrigin(serializeIrStatementOrigin(expression.origin)) expression.origin?.let{ setOrigin(serializeIrStatementOrigin(it)) }
}
.build() .build()
private fun serializeSpreadElement(element: IrSpreadElement): KotlinIr.IrSpreadElement { private fun serializeSpreadElement(element: IrSpreadElement): KotlinIr.IrSpreadElement {
@@ -650,7 +648,8 @@ open class IrModuleSerializer(
private fun serializeWhen(expression: IrWhen): KotlinIr.IrWhen { private fun serializeWhen(expression: IrWhen): KotlinIr.IrWhen {
val proto = KotlinIr.IrWhen.newBuilder() val proto = KotlinIr.IrWhen.newBuilder()
.setOrigin(serializeIrStatementOrigin(expression.origin))
expression.origin?.let{ proto.setOrigin(serializeIrStatementOrigin(it)) }
val branches = expression.branches val branches = expression.branches
branches.forEach { branches.forEach {
@@ -662,8 +661,9 @@ open class IrModuleSerializer(
private fun serializeLoop(expression: IrLoop): KotlinIr.Loop { private fun serializeLoop(expression: IrLoop): KotlinIr.Loop {
val proto = KotlinIr.Loop.newBuilder() val proto = KotlinIr.Loop.newBuilder()
.setCondition(serializeExpression(expression.condition)) .setCondition(serializeExpression(expression.condition)).apply {
.setOrigin(serializeIrStatementOrigin(expression.origin)) expression.origin?.let{ setOrigin(serializeIrStatementOrigin(it)) }
}
val label = expression.label?.let { serializeString(it) } val label = expression.label?.let { serializeString(it) }
if (label != null) { if (label != null) {