[IR] Store manglers used for signature computation in IrBackendInput
We will need them in signature dump tests later.
This commit is contained in:
committed by
Space Team
parent
a8b7306342
commit
a74df3b4b4
+40
-3
@@ -12,9 +12,11 @@ import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.signaturer.FirMangler
|
||||
import org.jetbrains.kotlin.ir.backend.js.KotlinFileSerializedData
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.test.model.BackendKinds
|
||||
import org.jetbrains.kotlin.test.model.ResultingArtifact
|
||||
@@ -26,11 +28,40 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
||||
|
||||
abstract val irModuleFragment: IrModuleFragment
|
||||
|
||||
/*
|
||||
/**
|
||||
* Here plugin context can be used as a service for inspecting resulting IR module
|
||||
*/
|
||||
abstract val irPluginContext: IrPluginContext
|
||||
|
||||
/**
|
||||
* The mangler instance that was used to build declaration signatures from (possibly deserialized) K1 descriptors for this backend.
|
||||
*
|
||||
* This instance can be used to verify signatures in tests.
|
||||
*
|
||||
* @see org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorMangleComputer
|
||||
* @see org.jetbrains.kotlin.ir.util.IdSignature
|
||||
*/
|
||||
abstract val descriptorMangler: KotlinMangler.DescriptorMangler
|
||||
|
||||
/**
|
||||
* The mangler instance that was used to build declaration signatures from IR declarations for this backend.
|
||||
*
|
||||
* @see org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrMangleComputer
|
||||
* @see org.jetbrains.kotlin.ir.util.IdSignature
|
||||
*/
|
||||
abstract val irMangler: KotlinMangler.IrMangler
|
||||
|
||||
/**
|
||||
* The mangler instance that was used to build declaration signatures from K2 (FIR) declarations for this backend, or `null` if
|
||||
* this artifact was compiled using the classic frontend.
|
||||
*
|
||||
* This instance can be used to verify signatures in tests.
|
||||
*
|
||||
* @see org.jetbrains.kotlin.fir.backend.FirMangleComputer
|
||||
* @see org.jetbrains.kotlin.ir.util.IdSignature
|
||||
*/
|
||||
abstract val firMangler: FirMangler?
|
||||
|
||||
data class JsIrBackendInput(
|
||||
val mainModuleFragment: IrModuleFragment,
|
||||
val dependentModuleFragments: List<IrModuleFragment>,
|
||||
@@ -40,7 +71,10 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
||||
val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>, // TODO: abstract from descriptors
|
||||
val diagnosticsCollector: BaseDiagnosticsCollector,
|
||||
val hasErrors: Boolean,
|
||||
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment
|
||||
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
||||
override val irMangler: KotlinMangler.IrMangler,
|
||||
override val firMangler: FirMangler?,
|
||||
val serializeSingleFile: (KtSourceFile, IrActualizedResult?) -> ProtoBuf.PackageFragment,
|
||||
) : IrBackendInput() {
|
||||
override val irModuleFragment: IrModuleFragment
|
||||
get() = mainModuleFragment
|
||||
@@ -51,7 +85,10 @@ sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
||||
val codegenFactory: JvmIrCodegenFactory,
|
||||
val dependentInputs: List<JvmIrCodegenFactory.JvmIrBackendInput>,
|
||||
val backendInput: JvmIrCodegenFactory.JvmIrBackendInput,
|
||||
val sourceFiles: List<KtSourceFile>
|
||||
val sourceFiles: List<KtSourceFile>,
|
||||
override val descriptorMangler: KotlinMangler.DescriptorMangler,
|
||||
override val irMangler: KotlinMangler.IrMangler,
|
||||
override val firMangler: FirMangler?,
|
||||
) : IrBackendInput() {
|
||||
override val irModuleFragment: IrModuleFragment
|
||||
get() = backendInput.irModuleFragment
|
||||
|
||||
+11
-2
@@ -16,8 +16,11 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.ir.backend.js.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||
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.js.config.ErrorTolerancePolicy
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
@@ -71,7 +74,10 @@ class ClassicFrontend2IrConverter(
|
||||
codegenFactory,
|
||||
dependentInputs = emptyList(),
|
||||
conversionResult,
|
||||
sourceFiles = emptyList()
|
||||
sourceFiles = emptyList(),
|
||||
descriptorMangler = conversionResult.symbolTable.signaturer.mangler,
|
||||
irMangler = JvmIrMangler,
|
||||
firMangler = null,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -111,7 +117,10 @@ class ClassicFrontend2IrConverter(
|
||||
icData,
|
||||
expectDescriptorToSymbol = expectDescriptorToSymbol,
|
||||
diagnosticsCollector = DiagnosticReporterFactory.createReporter(),
|
||||
hasErrors
|
||||
hasErrors,
|
||||
descriptorMangler = (pluginContext.symbolTable as SymbolTable).signaturer.mangler,
|
||||
irMangler = JsManglerIr,
|
||||
firMangler = null,
|
||||
) { file, _ ->
|
||||
metadataSerializer.serializeScope(file, analysisResult.bindingContext, moduleFragment.descriptor)
|
||||
}
|
||||
|
||||
+19
-13
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.test.frontend.fir
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
@@ -31,9 +32,11 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||
import org.jetbrains.kotlin.ir.backend.js.getSerializedData
|
||||
import org.jetbrains.kotlin.ir.backend.js.incrementalDataProvider
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||
import org.jetbrains.kotlin.library.unresolvedDependencies
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
@@ -42,9 +45,7 @@ import org.jetbrains.kotlin.test.model.BackendKinds
|
||||
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
|
||||
import org.jetbrains.kotlin.test.services.jsLibraryProvider
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
import org.jetbrains.kotlin.utils.metadataVersion
|
||||
|
||||
class Fir2IrJsResultsConverter(
|
||||
@@ -67,11 +68,9 @@ class Fir2IrJsResultsConverter(
|
||||
lateinit var mainPluginContext: IrPluginContext
|
||||
var irBuiltIns: IrBuiltInsOverFir? = null
|
||||
|
||||
val commonMemberStorage = Fir2IrCommonMemberStorage(
|
||||
generateSignatures = false,
|
||||
signatureComposerCreator = null,
|
||||
manglerCreator = ::FirJsKotlinMangler
|
||||
)
|
||||
val commonMemberStorage = Fir2IrCommonMemberStorage(IdSignatureDescriptor(JsManglerDesc), FirJsKotlinMangler())
|
||||
|
||||
val irMangler = JsManglerIr
|
||||
|
||||
for ((index, part) in inputArtifact.partsForDependsOnModules.withIndex()) {
|
||||
val (irModuleFragment, components, pluginContext) =
|
||||
@@ -82,7 +81,9 @@ class Fir2IrJsResultsConverter(
|
||||
configuration,
|
||||
testServices,
|
||||
commonMemberStorage,
|
||||
irBuiltIns
|
||||
irBuiltIns,
|
||||
irMangler,
|
||||
generateSignatures = true,
|
||||
)
|
||||
irBuiltIns = components.irBuiltIns
|
||||
mainPluginContext = pluginContext
|
||||
@@ -112,7 +113,10 @@ class Fir2IrJsResultsConverter(
|
||||
configuration.incrementalDataProvider?.getSerializedData(sourceFiles) ?: emptyList(),
|
||||
expectDescriptorToSymbol = mutableMapOf(),
|
||||
diagnosticsCollector = DiagnosticReporterFactory.createReporter(),
|
||||
hasErrors = inputArtifact.hasErrors
|
||||
hasErrors = inputArtifact.hasErrors,
|
||||
descriptorMangler = commonMemberStorage.symbolTable.signaturer.mangler,
|
||||
irMangler = irMangler,
|
||||
firMangler = commonMemberStorage.firSignatureComposer.mangler,
|
||||
) { file, irActualizedResult ->
|
||||
val (firFile, components) = firFilesAndComponentsBySourceFile[file]
|
||||
?: error("cannot find FIR file by source file ${file.name} (${file.path})")
|
||||
@@ -142,7 +146,9 @@ fun AbstractFirAnalyzerFacade.convertToJsIr(
|
||||
configuration: CompilerConfiguration,
|
||||
testServices: TestServices,
|
||||
commonMemberStorage: Fir2IrCommonMemberStorage,
|
||||
irBuiltIns: IrBuiltInsOverFir?
|
||||
irBuiltIns: IrBuiltInsOverFir?,
|
||||
irMangler: KotlinMangler.IrMangler,
|
||||
generateSignatures: Boolean
|
||||
): Fir2IrResult {
|
||||
this as FirAnalyzerFacade
|
||||
// TODO: consider avoiding repeated libraries resolution
|
||||
@@ -151,7 +157,7 @@ fun AbstractFirAnalyzerFacade.convertToJsIr(
|
||||
|
||||
val fir2IrConfiguration = Fir2IrConfiguration(
|
||||
languageVersionSettings = configuration.languageVersionSettings,
|
||||
linkViaSignatures = false,
|
||||
linkViaSignatures = generateSignatures,
|
||||
evaluatedConstTracker = configuration
|
||||
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
|
||||
)
|
||||
@@ -159,7 +165,7 @@ fun AbstractFirAnalyzerFacade.convertToJsIr(
|
||||
session, scopeSession, firFiles.toList(),
|
||||
fir2IrExtensions,
|
||||
fir2IrConfiguration,
|
||||
JsManglerIr, IrFactoryImpl,
|
||||
irMangler, IrFactoryImpl,
|
||||
Fir2IrVisibilityConverter.Default,
|
||||
Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation
|
||||
irGeneratorExtensions,
|
||||
|
||||
+8
-9
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.test.frontend.fir
|
||||
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
|
||||
@@ -22,8 +21,8 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.pipeline.signatureComposerForJvmFir2Ir
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||
@@ -66,7 +65,8 @@ class Fir2IrJvmResultsConverter(
|
||||
val compilerConfigurationProvider = testServices.compilerConfigurationProvider
|
||||
val configuration = compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||
|
||||
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||
val irMangler = JvmIrMangler
|
||||
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), irMangler)
|
||||
|
||||
// Create and initialize the module and its dependencies
|
||||
val project = compilerConfigurationProvider.getProject(module)
|
||||
@@ -89,11 +89,7 @@ class Fir2IrJvmResultsConverter(
|
||||
val firAnalyzerFacade = inputArtifact.partsForDependsOnModules.last().firAnalyzerFacade as? FirAnalyzerFacade
|
||||
val generateSignatures = firAnalyzerFacade?.fir2IrConfiguration?.linkViaSignatures == true
|
||||
|
||||
val commonMemberStorage = Fir2IrCommonMemberStorage(
|
||||
generateSignatures = generateSignatures,
|
||||
signatureComposerCreator = { JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) },
|
||||
manglerCreator = { FirJvmKotlinMangler() }
|
||||
)
|
||||
val commonMemberStorage = Fir2IrCommonMemberStorage(signatureComposerForJvmFir2Ir(generateSignatures), FirJvmKotlinMangler())
|
||||
var irBuiltIns: IrBuiltInsOverFir? = null
|
||||
|
||||
for ((index, firOutputPart) in inputArtifact.partsForDependsOnModules.withIndex()) {
|
||||
@@ -136,7 +132,10 @@ class Fir2IrJvmResultsConverter(
|
||||
codegenFactory,
|
||||
dependentIrParts,
|
||||
mainIrPart,
|
||||
sourceFiles
|
||||
sourceFiles,
|
||||
descriptorMangler = commonMemberStorage.symbolTable.signaturer.mangler,
|
||||
irMangler = irMangler,
|
||||
firMangler = commonMemberStorage.firSignatureComposer.mangler,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user