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) {
|
fun doGenerateFilesInternal(input: JvmIrBackendInput) {
|
||||||
val (state, irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) = input
|
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(
|
val context = JvmBackendContext(
|
||||||
state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension,
|
state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension, irSerializer,
|
||||||
notifyCodegenStart
|
notifyCodegenStart
|
||||||
)
|
)
|
||||||
/* JvmBackendContext creates new unbound symbols, have to resolve them. */
|
/* 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.ir.Ir
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.psi.PsiErrorBuilder
|
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.codegen.*
|
||||||
import org.jetbrains.kotlin.backend.jvm.descriptors.JvmSharedVariablesManager
|
import org.jetbrains.kotlin.backend.jvm.descriptors.JvmSharedVariablesManager
|
||||||
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
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.JvmInnerClassesSupport
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi
|
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.MemoizedInlineClassReplacements
|
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.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
@@ -50,6 +48,7 @@ class JvmBackendContext(
|
|||||||
val phaseConfig: PhaseConfig,
|
val phaseConfig: PhaseConfig,
|
||||||
val generatorExtensions: JvmGeneratorExtensions,
|
val generatorExtensions: JvmGeneratorExtensions,
|
||||||
val backendExtension: JvmBackendExtension,
|
val backendExtension: JvmBackendExtension,
|
||||||
|
val irSerializer: JvmIrSerializer?,
|
||||||
val notifyCodegenStart: () -> Unit,
|
val notifyCodegenStart: () -> Unit,
|
||||||
) : CommonBackendContext {
|
) : CommonBackendContext {
|
||||||
// If the JVM fqname of a class differs from what is implied by its parent, e.g. if it's a file class
|
// 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
|
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.common.phaser.makeCustomPhase
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.backend.jvm.expectDeclarationsRemovingPhase
|
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.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
@@ -27,11 +24,11 @@ internal val serializeIrPhase = makeCustomPhase<JvmBackendContext, IrModuleFragm
|
|||||||
|
|
||||||
class SerializeIrPhase(val context: JvmBackendContext) : FileLoweringPass {
|
class SerializeIrPhase(val context: JvmBackendContext) : FileLoweringPass {
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
if (context.state.configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR)) {
|
context.irSerializer?.let { irSerializer ->
|
||||||
(irFile.metadata as? MetadataSource.File)?.serializedIr = serializeIrFile(context, irFile)
|
(irFile.metadata as? MetadataSource.File)?.serializedIr = irSerializer.serializeIrFile(irFile)
|
||||||
|
|
||||||
for (irClass in irFile.declarations.filterIsInstance<IrClass>()) {
|
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.name.FqName
|
||||||
import org.jetbrains.kotlin.protobuf.ByteString
|
import org.jetbrains.kotlin.protobuf.ByteString
|
||||||
|
|
||||||
class JvmIrSerializer(
|
class JvmIrSerializerSession(
|
||||||
messageLogger: IrMessageLogger,
|
messageLogger: IrMessageLogger,
|
||||||
declarationTable: DeclarationTable,
|
declarationTable: DeclarationTable,
|
||||||
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
||||||
Reference in New Issue
Block a user