JVM_IR: introduce modes for IR serialization

Instead of a Boolean flag -Xserialize-ir, use modes: none,inline,all.
In "inline" mode, only information needed to deserialize bodies of inline
functions is serialized.
In the "all" mode, all declarations are serialized completely.
This commit is contained in:
Georgy Bronnikov
2021-09-09 13:35:23 +03:00
committed by TeamCityServer
parent f760cd6736
commit 4caa71538d
12 changed files with 55 additions and 16 deletions
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
import org.jetbrains.kotlin.backend.jvm.serialization.proto.JvmIr
import org.jetbrains.kotlin.config.JvmSerializeIrMode
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -20,11 +21,16 @@ class JvmIrSerializerSession(
messageLogger: IrMessageLogger,
private val declarationTable: DeclarationTable,
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
externallyVisibleOnly: Boolean = true,
mode: JvmSerializeIrMode,
skipExpects: Boolean = false,
) : IrFileSerializer(
messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT, externallyVisibleOnly, skipExpects
messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT,
bodiesOnlyForInlines = mode == JvmSerializeIrMode.INLINE,
skipExpects
) {
init {
assert(mode != JvmSerializeIrMode.NONE)
}
// Usage protocol: construct an instance, call only one of `serializeIrFile()` and `serializeTopLevelClass()` only once.