[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.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.ConstValueProviderImpl import org.jetbrains.kotlin.fir.backend.ConstValueProviderImpl
import org.jetbrains.kotlin.fir.backend.extractFirDeclarations 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.resolve.ScopeSession
import org.jetbrains.kotlin.fir.serialization.* import org.jetbrains.kotlin.fir.serialization.*
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment 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.ir.util.IrMessageLogger
import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.library.SerializedIrFile import org.jetbrains.kotlin.library.SerializedIrFile
@@ -72,7 +70,6 @@ internal fun PhaseContext.firSerializerBase(
fir2IrInput?.irModuleFragment, fir2IrInput?.irModuleFragment,
moduleName = fir2IrInput?.irModuleFragment?.descriptor?.name?.asString() moduleName = fir2IrInput?.irModuleFragment?.descriptor?.name?.asString()
?: firResult.outputs.last().session.moduleData.name.asString(), ?: firResult.outputs.last().session.moduleData.name.asString(),
expectDescriptorToSymbol = mutableMapOf(), // TODO: expect -> actual mapping
firFilesAndSessionsBySourceFile, firFilesAndSessionsBySourceFile,
) { firFile, session, scopeSession -> ) { firFile, session, scopeSession ->
serializeSingleFirFile( serializeSingleFirFile(
@@ -111,7 +108,6 @@ internal fun PhaseContext.serializeNativeModule(
dependencies: List<KonanLibrary>?, dependencies: List<KonanLibrary>?,
moduleFragment: IrModuleFragment?, moduleFragment: IrModuleFragment?,
moduleName: String, moduleName: String,
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
firFilesAndSessionsBySourceFile: Map<KtSourceFile, Triple<FirFile, FirSession, ScopeSession>>, firFilesAndSessionsBySourceFile: Map<KtSourceFile, Triple<FirFile, FirSession, ScopeSession>>,
serializeSingleFile: (FirFile, FirSession, ScopeSession) -> ProtoBuf.PackageFragment serializeSingleFile: (FirFile, FirSession, ScopeSession) -> ProtoBuf.PackageFragment
): SerializerOutput { ): SerializerOutput {
@@ -126,7 +122,6 @@ internal fun PhaseContext.serializeNativeModule(
KonanIrModuleSerializer( KonanIrModuleSerializer(
messageLogger, messageLogger,
moduleFragment.irBuiltins, moduleFragment.irBuiltins,
expectDescriptorToSymbol,
CompatibilityMode.CURRENT, CompatibilityMode.CURRENT,
normalizeAbsolutePaths = absolutePathNormalization, normalizeAbsolutePaths = absolutePathNormalization,
sourceBaseDirs = sourceBaseDirs, 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.interop.IrProviderForCEnumAndCStructStubs
import org.jetbrains.kotlin.backend.konan.ir.konanLibrary import org.jetbrains.kotlin.backend.konan.ir.konanLibrary
import org.jetbrains.kotlin.backend.konan.serialization.* import org.jetbrains.kotlin.backend.konan.serialization.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrBuiltIns
@@ -55,7 +53,6 @@ internal fun PsiToIrContext.psiToIr(
val symbolTable = symbolTable!! val symbolTable = symbolTable!!
val (moduleDescriptor, environment, isProducingLibrary) = input val (moduleDescriptor, environment, isProducingLibrary) = input
// Translate AST to high level IR. // Translate AST to high level IR.
val expectActualLinker = config.configuration[CommonConfigurationKeys.EXPECT_ACTUAL_LINKER] ?: false
val messageLogger = config.configuration.irMessageLogger val messageLogger = config.configuration.irMessageLogger
val partialLinkageConfig = config.configuration.partialLinkageConfig val partialLinkageConfig = config.configuration.partialLinkageConfig
@@ -214,17 +211,11 @@ internal fun PsiToIrContext.psiToIr(
} }
} }
val expectDescriptorToSymbol = mutableMapOf<DeclarationDescriptor, IrSymbol>()
val mainModule = translator.generateModuleFragment( val mainModule = translator.generateModuleFragment(
generatorContext, generatorContext,
environment.getSourceFiles(), environment.getSourceFiles(),
irProviders = listOf(irDeserializer), irProviders = listOf(irDeserializer),
linkerExtensions = pluginExtensions, 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() ).toKonanModule()
irDeserializer.postProcess(inOrAfterLinkageStep = true) irDeserializer.postProcess(inOrAfterLinkageStep = true)
@@ -263,7 +254,7 @@ internal fun PsiToIrContext.psiToIr(
} }
return if (isProducingLibrary) { return if (isProducingLibrary) {
PsiToIrOutput.ForKlib(mainModule, symbols, expectDescriptorToSymbol) PsiToIrOutput.ForKlib(mainModule, symbols)
} else if (libraryToCache == null) { } else if (libraryToCache == null) {
PsiToIrOutput.ForBackend(modules, mainModule, symbols, irDeserializer as KonanIrLinker) PsiToIrOutput.ForBackend(modules, mainModule, symbols, irDeserializer as KonanIrLinker)
} else { } 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.backend.konan.serialization.KonanManglerDesc
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl 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.ir.util.SymbolTable
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.CleanableBindingContext import org.jetbrains.kotlin.resolve.CleanableBindingContext
@@ -53,8 +51,7 @@ internal sealed class PsiToIrOutput(
class ForKlib( class ForKlib(
irModule: IrModuleFragment, irModule: IrModuleFragment,
symbols: KonanSymbols, symbols: KonanSymbols,
val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>, ) : PsiToIrOutput(irModule, symbols)
): PsiToIrOutput(irModule, symbols)
} }
// TODO: Consider component-based approach // TODO: Consider component-based approach
@@ -43,7 +43,7 @@ internal val SerializerPhase = createSimpleNamedCompilerPhase<PhaseContext, Seri
val serializedIr = input.psiToIrOutput?.let { val serializedIr = input.psiToIrOutput?.let {
val ir = it.irModule val ir = it.irModule
KonanIrModuleSerializer( KonanIrModuleSerializer(
messageLogger, ir.irBuiltins, it.expectDescriptorToSymbol, messageLogger, ir.irBuiltins,
compatibilityMode = CompatibilityMode.CURRENT, compatibilityMode = CompatibilityMode.CURRENT,
normalizeAbsolutePaths = normalizeAbsolutePaths, normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = relativePathBase, 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.common.serialization.IrFileSerializer
import org.jetbrains.kotlin.backend.konan.RuntimeNames import org.jetbrains.kotlin.backend.konan.RuntimeNames
import org.jetbrains.kotlin.config.LanguageVersionSettings 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.IrAnnotationContainer
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFunction 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.IrMessageLogger
import org.jetbrains.kotlin.ir.util.hasAnnotation import org.jetbrains.kotlin.ir.util.hasAnnotation
class KonanIrFileSerializer( class KonanIrFileSerializer(
messageLogger: IrMessageLogger, messageLogger: IrMessageLogger,
declarationTable: DeclarationTable, declarationTable: DeclarationTable,
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>, languageVersionSettings: LanguageVersionSettings,
languageVersionSettings: LanguageVersionSettings, bodiesOnlyForInlines: Boolean = false,
bodiesOnlyForInlines: Boolean = false, compatibilityMode: CompatibilityMode,
compatibilityMode: CompatibilityMode, normalizeAbsolutePaths: Boolean,
normalizeAbsolutePaths: Boolean, sourceBaseDirs: Collection<String>
sourceBaseDirs: Collection<String> ) : IrFileSerializer(
): IrFileSerializer(messageLogger, declarationTable, expectDescriptorToSymbol, compatibilityMode, languageVersionSettings, messageLogger = messageLogger,
bodiesOnlyForInlines, normalizeAbsolutePaths = normalizeAbsolutePaths, sourceBaseDirs = sourceBaseDirs) { declarationTable = declarationTable,
compatibilityMode = compatibilityMode,
languageVersionSettings = languageVersionSettings,
bodiesOnlyForInlines = bodiesOnlyForInlines,
normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs
) {
override fun backendSpecificExplicitRoot(node: IrAnnotationContainer): Boolean { override fun backendSpecificExplicitRoot(node: IrAnnotationContainer): Boolean {
val fqn = when (node) { 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.common.serialization.IrModuleSerializer
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.IrMessageLogger
class KonanIrModuleSerializer( class KonanIrModuleSerializer(
messageLogger: IrMessageLogger, messageLogger: IrMessageLogger,
irBuiltIns: IrBuiltIns, irBuiltIns: IrBuiltIns,
private val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>, compatibilityMode: CompatibilityMode,
compatibilityMode: CompatibilityMode, normalizeAbsolutePaths: Boolean,
normalizeAbsolutePaths: Boolean, sourceBaseDirs: Collection<String>,
sourceBaseDirs: Collection<String>, private val languageVersionSettings: LanguageVersionSettings,
private val languageVersionSettings: LanguageVersionSettings,
) : IrModuleSerializer<KonanIrFileSerializer>(messageLogger, compatibilityMode, normalizeAbsolutePaths, sourceBaseDirs) { ) : IrModuleSerializer<KonanIrFileSerializer>(messageLogger, compatibilityMode, normalizeAbsolutePaths, sourceBaseDirs) {
private val globalDeclarationTable = KonanGlobalDeclarationTable(irBuiltIns) private val globalDeclarationTable = KonanGlobalDeclarationTable(irBuiltIns)
@@ -32,7 +29,7 @@ class KonanIrModuleSerializer(
file.fileEntry.name != IrProviderForCEnumAndCStructStubs.cTypeDefinitionsFileName file.fileEntry.name != IrProviderForCEnumAndCStructStubs.cTypeDefinitionsFileName
override fun createSerializerForFile(file: IrFile): KonanIrFileSerializer = override fun createSerializerForFile(file: IrFile): KonanIrFileSerializer =
KonanIrFileSerializer(messageLogger, KonanDeclarationTable(globalDeclarationTable), expectDescriptorToSymbol, KonanIrFileSerializer(messageLogger, KonanDeclarationTable(globalDeclarationTable),
compatibilityMode = compatibilityMode, compatibilityMode = compatibilityMode,
normalizeAbsolutePaths = normalizeAbsolutePaths, normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs, sourceBaseDirs = sourceBaseDirs,