[IR][Native] Drop KonanIrFileSerializer.expectDescriptorToSymbol parameter

^KT-61136
This commit is contained in:
Dmitriy Dolovov
2023-08-10 16:25:40 +02:00
committed by Space Team
parent f3c58bcfb3
commit b37bb0be16
6 changed files with 26 additions and 42 deletions
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.backend.konan.serialization.KonanIrModuleSerializer
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.ConstValueProviderImpl
import org.jetbrains.kotlin.fir.backend.extractFirDeclarations
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.fir.pipeline.FirResult
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.serialization.*
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.IrMessageLogger
import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.library.SerializedIrFile
@@ -72,7 +70,6 @@ internal fun PhaseContext.firSerializerBase(
fir2IrInput?.irModuleFragment,
moduleName = fir2IrInput?.irModuleFragment?.descriptor?.name?.asString()
?: firResult.outputs.last().session.moduleData.name.asString(),
expectDescriptorToSymbol = mutableMapOf(), // TODO: expect -> actual mapping
firFilesAndSessionsBySourceFile,
) { firFile, session, scopeSession ->
serializeSingleFirFile(
@@ -111,7 +108,6 @@ internal fun PhaseContext.serializeNativeModule(
dependencies: List<KonanLibrary>?,
moduleFragment: IrModuleFragment?,
moduleName: String,
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
firFilesAndSessionsBySourceFile: Map<KtSourceFile, Triple<FirFile, FirSession, ScopeSession>>,
serializeSingleFile: (FirFile, FirSession, ScopeSession) -> ProtoBuf.PackageFragment
): SerializerOutput {
@@ -126,7 +122,6 @@ internal fun PhaseContext.serializeNativeModule(
KonanIrModuleSerializer(
messageLogger,
moduleFragment.irBuiltins,
expectDescriptorToSymbol,
CompatibilityMode.CURRENT,
normalizeAbsolutePaths = absolutePathNormalization,
sourceBaseDirs = sourceBaseDirs,
@@ -18,9 +18,7 @@ import org.jetbrains.kotlin.backend.konan.ir.SymbolOverDescriptorsLookupUtils
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs
import org.jetbrains.kotlin.backend.konan.ir.konanLibrary
import org.jetbrains.kotlin.backend.konan.serialization.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.IrBuiltIns
@@ -55,7 +53,6 @@ internal fun PsiToIrContext.psiToIr(
val symbolTable = symbolTable!!
val (moduleDescriptor, environment, isProducingLibrary) = input
// Translate AST to high level IR.
val expectActualLinker = config.configuration[CommonConfigurationKeys.EXPECT_ACTUAL_LINKER] ?: false
val messageLogger = config.configuration.irMessageLogger
val partialLinkageConfig = config.configuration.partialLinkageConfig
@@ -214,17 +211,11 @@ internal fun PsiToIrContext.psiToIr(
}
}
val expectDescriptorToSymbol = mutableMapOf<DeclarationDescriptor, IrSymbol>()
val mainModule = translator.generateModuleFragment(
generatorContext,
environment.getSourceFiles(),
irProviders = listOf(irDeserializer),
linkerExtensions = pluginExtensions,
// TODO: This is a hack to allow platform libs to build in reasonable time.
// referenceExpectsForUsedActuals() appears to be quadratic in time because of
// how ExpectedActualResolver is implemented.
// Need to fix ExpectActualResolver to either cache expects or somehow reduce the member scope searches.
expectDescriptorToSymbol = if (expectActualLinker) expectDescriptorToSymbol else null
).toKonanModule()
irDeserializer.postProcess(inOrAfterLinkageStep = true)
@@ -263,7 +254,7 @@ internal fun PsiToIrContext.psiToIr(
}
return if (isProducingLibrary) {
PsiToIrOutput.ForKlib(mainModule, symbols, expectDescriptorToSymbol)
PsiToIrOutput.ForKlib(mainModule, symbols)
} else if (libraryToCache == null) {
PsiToIrOutput.ForBackend(modules, mainModule, symbols, irDeserializer as KonanIrLinker)
} else {
@@ -18,12 +18,10 @@ import org.jetbrains.kotlin.backend.konan.serialization.KonanIrLinker
import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerDesc
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.CleanableBindingContext
@@ -53,8 +51,7 @@ internal sealed class PsiToIrOutput(
class ForKlib(
irModule: IrModuleFragment,
symbols: KonanSymbols,
val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
): PsiToIrOutput(irModule, symbols)
) : PsiToIrOutput(irModule, symbols)
}
// TODO: Consider component-based approach
@@ -43,7 +43,7 @@ internal val SerializerPhase = createSimpleNamedCompilerPhase<PhaseContext, Seri
val serializedIr = input.psiToIrOutput?.let {
val ir = it.irModule
KonanIrModuleSerializer(
messageLogger, ir.irBuiltins, it.expectDescriptorToSymbol,
messageLogger, ir.irBuiltins,
compatibilityMode = CompatibilityMode.CURRENT,
normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = relativePathBase,
@@ -5,25 +5,29 @@ import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
import org.jetbrains.kotlin.backend.konan.RuntimeNames
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.IrMessageLogger
import org.jetbrains.kotlin.ir.util.hasAnnotation
class KonanIrFileSerializer(
messageLogger: IrMessageLogger,
declarationTable: DeclarationTable,
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
languageVersionSettings: LanguageVersionSettings,
bodiesOnlyForInlines: Boolean = false,
compatibilityMode: CompatibilityMode,
normalizeAbsolutePaths: Boolean,
sourceBaseDirs: Collection<String>
): IrFileSerializer(messageLogger, declarationTable, expectDescriptorToSymbol, compatibilityMode, languageVersionSettings,
bodiesOnlyForInlines, normalizeAbsolutePaths = normalizeAbsolutePaths, sourceBaseDirs = sourceBaseDirs) {
messageLogger: IrMessageLogger,
declarationTable: DeclarationTable,
languageVersionSettings: LanguageVersionSettings,
bodiesOnlyForInlines: Boolean = false,
compatibilityMode: CompatibilityMode,
normalizeAbsolutePaths: Boolean,
sourceBaseDirs: Collection<String>
) : IrFileSerializer(
messageLogger = messageLogger,
declarationTable = declarationTable,
compatibilityMode = compatibilityMode,
languageVersionSettings = languageVersionSettings,
bodiesOnlyForInlines = bodiesOnlyForInlines,
normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs
) {
override fun backendSpecificExplicitRoot(node: IrAnnotationContainer): Boolean {
val fqn = when (node) {
@@ -4,20 +4,17 @@ import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
import org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.IrMessageLogger
class KonanIrModuleSerializer(
messageLogger: IrMessageLogger,
irBuiltIns: IrBuiltIns,
private val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
compatibilityMode: CompatibilityMode,
normalizeAbsolutePaths: Boolean,
sourceBaseDirs: Collection<String>,
private val languageVersionSettings: LanguageVersionSettings,
messageLogger: IrMessageLogger,
irBuiltIns: IrBuiltIns,
compatibilityMode: CompatibilityMode,
normalizeAbsolutePaths: Boolean,
sourceBaseDirs: Collection<String>,
private val languageVersionSettings: LanguageVersionSettings,
) : IrModuleSerializer<KonanIrFileSerializer>(messageLogger, compatibilityMode, normalizeAbsolutePaths, sourceBaseDirs) {
private val globalDeclarationTable = KonanGlobalDeclarationTable(irBuiltIns)
@@ -32,7 +29,7 @@ class KonanIrModuleSerializer(
file.fileEntry.name != IrProviderForCEnumAndCStructStubs.cTypeDefinitionsFileName
override fun createSerializerForFile(file: IrFile): KonanIrFileSerializer =
KonanIrFileSerializer(messageLogger, KonanDeclarationTable(globalDeclarationTable), expectDescriptorToSymbol,
KonanIrFileSerializer(messageLogger, KonanDeclarationTable(globalDeclarationTable),
compatibilityMode = compatibilityMode,
normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs,