[KLIB] Fix serialization of loops with control statements in condition

This commit is contained in:
Roman Artemev
2021-06-07 18:57:09 +03:00
committed by teamcityserver
parent e5c6a5b80d
commit 0cb23a6e65
@@ -6,7 +6,9 @@
package org.jetbrains.kotlin.backend.common.serialization
import org.jetbrains.kotlin.backend.common.serialization.encodings.*
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.InlineClassRepresentation
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrFileEntry
import org.jetbrains.kotlin.ir.declarations.*
@@ -17,7 +19,10 @@ import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.SerializedDeclaration
import org.jetbrains.kotlin.library.SerializedIrFile
import org.jetbrains.kotlin.library.SkippedDeclaration
import org.jetbrains.kotlin.library.TopLevelDeclaration
import org.jetbrains.kotlin.library.impl.IrMemoryArrayWriter
import org.jetbrains.kotlin.library.impl.IrMemoryDeclarationWriter
import org.jetbrains.kotlin.library.impl.IrMemoryStringWriter
@@ -796,6 +801,9 @@ open class IrFileSerializer(
}
private fun serializeLoop(expression: IrLoop): ProtoLoop {
val loopIdx = currentLoopIndex++
loopIndex[expression] = loopIdx
val proto = ProtoLoop.newBuilder()
.setCondition(serializeExpression(expression.condition)).apply {
expression.origin?.let { setOriginName(serializeIrStatementOrigin(it)) }
@@ -805,8 +813,7 @@ open class IrFileSerializer(
proto.label = serializeString(it)
}
proto.loopId = currentLoopIndex
loopIndex[expression] = currentLoopIndex++
proto.loopId = loopIdx
val body = expression.body
if (body != null) {