JVM_IR: untangle backend.jvm and serialization.jvm (again)
This commit is contained in:
committed by
TeamCityServer
parent
1c4466951f
commit
a63cc95a2a
+4
-1
@@ -179,8 +179,11 @@ open class JvmIrCodegenFactory(
|
||||
|
||||
fun doGenerateFilesInternal(input: JvmIrBackendInput) {
|
||||
val (state, irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) = input
|
||||
val irSerializer = if (state.configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR))
|
||||
JvmIrSerializerImpl(state.configuration)
|
||||
else null
|
||||
val context = JvmBackendContext(
|
||||
state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension,
|
||||
state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension, irSerializer,
|
||||
notifyCodegenStart
|
||||
)
|
||||
/* JvmBackendContext creates new unbound symbols, have to resolve them. */
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmGlobalDeclarationTable
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIrSerializerSession
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
|
||||
class JvmIrSerializerImpl(private val configuration: CompilerConfiguration) : JvmIrSerializer {
|
||||
|
||||
private val declarationTable = DeclarationTable(JvmGlobalDeclarationTable())
|
||||
|
||||
override fun serializeIrFile(irFile: IrFile): ByteArray {
|
||||
return makeSerializerSession().serializeJvmIrFile(irFile).toByteArray()
|
||||
}
|
||||
|
||||
override fun serializeTopLevelIrClass(irClass: IrClass): ByteArray {
|
||||
assert(irClass.parent is IrFile)
|
||||
return makeSerializerSession().serializeTopLevelClass(irClass).toByteArray()
|
||||
}
|
||||
|
||||
private fun makeSerializerSession() =
|
||||
JvmIrSerializerSession(
|
||||
configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None,
|
||||
declarationTable,
|
||||
mutableMapOf(),
|
||||
)
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.common.Mapping
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.common.psi.PsiErrorBuilder
|
||||
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.*
|
||||
import org.jetbrains.kotlin.backend.jvm.descriptors.JvmSharedVariablesManager
|
||||
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
||||
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.backend.jvm.lower.CollectionStubComputer
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.JvmInnerClassesSupport
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.MemoizedInlineClassReplacements
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmGlobalDeclarationTable
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
@@ -50,6 +48,7 @@ class JvmBackendContext(
|
||||
val phaseConfig: PhaseConfig,
|
||||
val generatorExtensions: JvmGeneratorExtensions,
|
||||
val backendExtension: JvmBackendExtension,
|
||||
val irSerializer: JvmIrSerializer?,
|
||||
val notifyCodegenStart: () -> Unit,
|
||||
) : CommonBackendContext {
|
||||
// If the JVM fqname of a class differs from what is implied by its parent, e.g. if it's a file class
|
||||
@@ -225,6 +224,4 @@ class JvmBackendContext(
|
||||
|
||||
override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true
|
||||
}
|
||||
|
||||
val declarationTable = DeclarationTable(JvmGlobalDeclarationTable())
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm
|
||||
|
||||
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
|
||||
}
|
||||
+3
-6
@@ -10,9 +10,6 @@ import org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeCustomPhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.expectDeclarationsRemovingPhase
|
||||
import org.jetbrains.kotlin.backend.jvm.serializeIrFile
|
||||
import org.jetbrains.kotlin.backend.jvm.serializeTopLevelIrClass
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
@@ -27,11 +24,11 @@ internal val serializeIrPhase = makeCustomPhase<JvmBackendContext, IrModuleFragm
|
||||
|
||||
class SerializeIrPhase(val context: JvmBackendContext) : FileLoweringPass {
|
||||
override fun lower(irFile: IrFile) {
|
||||
if (context.state.configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR)) {
|
||||
(irFile.metadata as? MetadataSource.File)?.serializedIr = serializeIrFile(context, irFile)
|
||||
context.irSerializer?.let { irSerializer ->
|
||||
(irFile.metadata as? MetadataSource.File)?.serializedIr = irSerializer.serializeIrFile(irFile)
|
||||
|
||||
for (irClass in irFile.declarations.filterIsInstance<IrClass>()) {
|
||||
(irClass.metadata as? MetadataSource.Class)?.serializedIr = serializeTopLevelIrClass(context, irClass)
|
||||
(irClass.metadata as? MetadataSource.Class)?.serializedIr = irSerializer.serializeTopLevelIrClass(irClass)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm
|
||||
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIrSerializer
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
|
||||
fun serializeIrFile(context: JvmBackendContext, irFile: IrFile): ByteArray {
|
||||
return makeSerializer(context).serializeJvmIrFile(irFile).toByteArray()
|
||||
}
|
||||
|
||||
fun serializeTopLevelIrClass(context: JvmBackendContext, irClass: IrClass): ByteArray {
|
||||
assert(irClass.parent is IrFile)
|
||||
return makeSerializer(context).serializeTopLevelClass(irClass).toByteArray()
|
||||
}
|
||||
|
||||
private fun makeSerializer(context: JvmBackendContext) =
|
||||
JvmIrSerializer(
|
||||
context.configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None,
|
||||
context.declarationTable,
|
||||
mutableMapOf(),
|
||||
)
|
||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.protobuf.ByteString
|
||||
|
||||
class JvmIrSerializer(
|
||||
class JvmIrSerializerSession(
|
||||
messageLogger: IrMessageLogger,
|
||||
declarationTable: DeclarationTable,
|
||||
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
||||
Reference in New Issue
Block a user