JVM_IR: only serialize inline functions themselves with -Xserialize-ir=inline

This commit is contained in:
Georgy Bronnikov
2021-09-15 21:34:56 +03:00
committed by TeamCityServer
parent 4caa71538d
commit a9ce25cf33
12 changed files with 951 additions and 2379 deletions
@@ -9,8 +9,7 @@ import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclaration
import org.jetbrains.kotlin.backend.common.ir.createParameterDeclarations
import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer
import org.jetbrains.kotlin.backend.jvm.lower.SingletonObjectJvmStaticTransformer
import org.jetbrains.kotlin.backend.jvm.serialization.deserializeClassFromByteArray
import org.jetbrains.kotlin.backend.jvm.serialization.deserializeIrFileFromByteArray
import org.jetbrains.kotlin.backend.jvm.serialization.deserializeFromByteArray
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.JvmSerializeIrMode
@@ -25,7 +24,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
@@ -119,28 +117,18 @@ open class JvmGeneratorExtensionsImpl(
}
}
override fun deserializeLazyClass(
irClass: IrLazyClass,
stubGenerator: DeclarationStubGenerator,
parent: IrDeclarationParent,
allowErrorNodes: Boolean
): Boolean {
val serializedIr = (irClass.source as? KotlinJvmBinarySourceElement)?.binaryClass?.classHeader?.serializedIr ?: return false
deserializeClassFromByteArray(
serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes
)
irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null)
return true
}
override fun deserializeFacadeClass(
override fun deserializeClass(
irClass: IrClass,
stubGenerator: DeclarationStubGenerator,
parent: IrDeclarationParent,
allowErrorNodes: Boolean
): Boolean {
val serializedIr = (irClass.source as? JvmPackagePartSource)?.knownJvmBinaryClass?.classHeader?.serializedIr ?: return false
deserializeIrFileFromByteArray(
val serializedIr = when (val source = irClass.source) {
is KotlinJvmBinarySourceElement -> source.binaryClass.classHeader.serializedIr
is JvmPackagePartSource -> source.knownJvmBinaryClass?.classHeader?.serializedIr
else -> null
} ?: return false
deserializeFromByteArray(
serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes
)
irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null)
@@ -19,13 +19,13 @@ class JvmIrSerializerImpl(private val configuration: CompilerConfiguration) : Jv
private val declarationTable = DeclarationTable(JvmGlobalDeclarationTable())
override fun serializeIrFile(irFile: IrFile): ByteArray {
return makeSerializerSession().serializeJvmIrFile(irFile).toByteArray()
override fun serializeIrFile(irFile: IrFile): ByteArray? {
return makeSerializerSession().serializeJvmIrFile(irFile)?.toByteArray()
}
override fun serializeTopLevelIrClass(irClass: IrClass): ByteArray {
override fun serializeTopLevelIrClass(irClass: IrClass): ByteArray? {
assert(irClass.parent is IrFile)
return makeSerializerSession().serializeTopLevelClass(irClass).toByteArray()
return makeSerializerSession().serializeTopLevelClass(irClass)?.toByteArray()
}
private fun makeSerializerSession() =
@@ -28,8 +28,7 @@ class JvmFileFacadeClass(
private var irLoaded: Boolean? = null
override fun loadIr(): Boolean {
irLoaded?.let { return it }
irLoaded = stubGenerator.extensions.deserializeFacadeClass(this, stubGenerator, parent, allowErrorNodes = false)
return irLoaded!!
return irLoaded ?:
stubGenerator.extensions.deserializeClass(this, stubGenerator, parent, allowErrorNodes = false).also { irLoaded = it }
}
}
@@ -9,6 +9,6 @@ import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFile
interface JvmIrSerializer {
fun serializeTopLevelIrClass(irClass: IrClass): ByteArray
fun serializeIrFile(irFile: IrFile): ByteArray
fun serializeTopLevelIrClass(irClass: IrClass): ByteArray?
fun serializeIrFile(irFile: IrFile): ByteArray?
}