[FIR2IR] Make convertToIrAndActualize() more reusable across backends
This commit is contained in:
committed by
Space Team
parent
199b0e8cbe
commit
cf4934f539
+1
-1
@@ -159,7 +159,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
performanceManager?.notifyIRTranslationStarted()
|
performanceManager?.notifyIRTranslationStarted()
|
||||||
|
|
||||||
val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler)
|
val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||||
val fir2IrResult = firResult.convertToIrAndActualize(
|
val fir2IrResult = firResult.convertToIrAndActualizeForJvm(
|
||||||
fir2IrExtensions,
|
fir2IrExtensions,
|
||||||
irGenerationExtensions,
|
irGenerationExtensions,
|
||||||
linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
|
linkViaSignatures = moduleConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ fun convertAnalyzedFirToIr(
|
|||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
val linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
|
val linkViaSignatures = input.configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
|
||||||
val (irModuleFragment, components, pluginContext) =
|
val (irModuleFragment, components, pluginContext) =
|
||||||
analysisResults.convertToIrAndActualize(extensions, irGenerationExtensions, linkViaSignatures)
|
analysisResults.convertToIrAndActualizeForJvm(extensions, irGenerationExtensions, linkViaSignatures)
|
||||||
|
|
||||||
return ModuleCompilerIrBackendInput(
|
return ModuleCompilerIrBackendInput(
|
||||||
input.targetId,
|
input.targetId,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
|||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
||||||
@@ -20,6 +21,8 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||||
|
import org.jetbrains.kotlin.ir.util.IdSignatureComposer
|
||||||
|
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||||
|
|
||||||
data class FirResult(
|
data class FirResult(
|
||||||
val platformOutput: ModuleCompilerAnalyzedOutput,
|
val platformOutput: ModuleCompilerAnalyzedOutput,
|
||||||
@@ -32,17 +35,35 @@ data class ModuleCompilerAnalyzedOutput(
|
|||||||
val fir: List<FirFile>
|
val fir: List<FirFile>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun FirResult.convertToIrAndActualizeForJvm(
|
||||||
|
fir2IrExtensions: Fir2IrExtensions,
|
||||||
|
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||||
|
linkViaSignatures: Boolean,
|
||||||
|
): Fir2IrResult = this.convertToIrAndActualize(
|
||||||
|
fir2IrExtensions,
|
||||||
|
irGeneratorExtensions,
|
||||||
|
linkViaSignatures = linkViaSignatures,
|
||||||
|
signatureComposerCreator = { JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) },
|
||||||
|
irMangler = JvmIrMangler,
|
||||||
|
visibilityConverter = FirJvmVisibilityConverter,
|
||||||
|
kotlinBuiltIns = DefaultBuiltIns.Instance,
|
||||||
|
)
|
||||||
|
|
||||||
fun FirResult.convertToIrAndActualize(
|
fun FirResult.convertToIrAndActualize(
|
||||||
fir2IrExtensions: Fir2IrExtensions,
|
fir2IrExtensions: Fir2IrExtensions,
|
||||||
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||||
linkViaSignatures: Boolean,
|
linkViaSignatures: Boolean,
|
||||||
|
signatureComposerCreator: (() -> IdSignatureComposer)?,
|
||||||
|
irMangler: KotlinMangler.IrMangler,
|
||||||
|
visibilityConverter: Fir2IrVisibilityConverter,
|
||||||
|
kotlinBuiltIns: KotlinBuiltIns,
|
||||||
): Fir2IrResult {
|
): Fir2IrResult {
|
||||||
val result: Fir2IrResult
|
val result: Fir2IrResult
|
||||||
|
|
||||||
val commonMemberStorage = Fir2IrCommonMemberStorage(
|
val commonMemberStorage = Fir2IrCommonMemberStorage(
|
||||||
generateSignatures = linkViaSignatures,
|
generateSignatures = linkViaSignatures,
|
||||||
signatureComposerCreator = { JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) },
|
signatureComposerCreator = signatureComposerCreator,
|
||||||
manglerCreator = { FirJvmKotlinMangler() }
|
manglerCreator = { FirJvmKotlinMangler() } // TODO: replace with potentially simpler version for other backends.
|
||||||
)
|
)
|
||||||
|
|
||||||
if (commonOutput != null) {
|
if (commonOutput != null) {
|
||||||
@@ -51,14 +72,20 @@ fun FirResult.convertToIrAndActualize(
|
|||||||
irGeneratorExtensions,
|
irGeneratorExtensions,
|
||||||
linkViaSignatures = linkViaSignatures,
|
linkViaSignatures = linkViaSignatures,
|
||||||
commonMemberStorage = commonMemberStorage,
|
commonMemberStorage = commonMemberStorage,
|
||||||
irBuiltIns = null
|
irBuiltIns = null,
|
||||||
|
irMangler,
|
||||||
|
visibilityConverter,
|
||||||
|
kotlinBuiltIns,
|
||||||
)
|
)
|
||||||
result = platformOutput.convertToIr(
|
result = platformOutput.convertToIr(
|
||||||
fir2IrExtensions,
|
fir2IrExtensions,
|
||||||
irGeneratorExtensions,
|
irGeneratorExtensions,
|
||||||
linkViaSignatures = linkViaSignatures,
|
linkViaSignatures = linkViaSignatures,
|
||||||
commonMemberStorage = commonMemberStorage,
|
commonMemberStorage = commonMemberStorage,
|
||||||
irBuiltIns = commonIrOutput.components.irBuiltIns
|
irBuiltIns = commonIrOutput.components.irBuiltIns,
|
||||||
|
irMangler,
|
||||||
|
visibilityConverter,
|
||||||
|
kotlinBuiltIns,
|
||||||
)
|
)
|
||||||
IrActualizer.actualize(
|
IrActualizer.actualize(
|
||||||
result.irModuleFragment,
|
result.irModuleFragment,
|
||||||
@@ -70,7 +97,10 @@ fun FirResult.convertToIrAndActualize(
|
|||||||
irGeneratorExtensions,
|
irGeneratorExtensions,
|
||||||
linkViaSignatures = linkViaSignatures,
|
linkViaSignatures = linkViaSignatures,
|
||||||
commonMemberStorage = commonMemberStorage,
|
commonMemberStorage = commonMemberStorage,
|
||||||
irBuiltIns = null
|
irBuiltIns = null,
|
||||||
|
irMangler,
|
||||||
|
visibilityConverter,
|
||||||
|
kotlinBuiltIns,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +112,18 @@ private fun ModuleCompilerAnalyzedOutput.convertToIr(
|
|||||||
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
irGeneratorExtensions: Collection<IrGenerationExtension>,
|
||||||
linkViaSignatures: Boolean,
|
linkViaSignatures: Boolean,
|
||||||
commonMemberStorage: Fir2IrCommonMemberStorage,
|
commonMemberStorage: Fir2IrCommonMemberStorage,
|
||||||
irBuiltIns: IrBuiltInsOverFir?
|
irBuiltIns: IrBuiltInsOverFir?,
|
||||||
|
irMangler: KotlinMangler.IrMangler,
|
||||||
|
visibilityConverter: Fir2IrVisibilityConverter,
|
||||||
|
kotlinBuiltIns: KotlinBuiltIns,
|
||||||
): Fir2IrResult {
|
): Fir2IrResult {
|
||||||
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
|
return Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded(
|
||||||
session, scopeSession, fir,
|
session, scopeSession, fir,
|
||||||
session.languageVersionSettings, fir2IrExtensions,
|
session.languageVersionSettings, fir2IrExtensions,
|
||||||
JvmIrMangler, IrFactoryImpl, FirJvmVisibilityConverter,
|
irMangler, IrFactoryImpl, visibilityConverter,
|
||||||
Fir2IrJvmSpecialAnnotationSymbolProvider(),
|
Fir2IrJvmSpecialAnnotationSymbolProvider(), // TODO: replace with appropriate (probably empty) implementation for other backends.
|
||||||
irGeneratorExtensions,
|
irGeneratorExtensions,
|
||||||
kotlinBuiltIns = DefaultBuiltIns.Instance, // TODO: consider passing externally
|
kotlinBuiltIns = kotlinBuiltIns,
|
||||||
generateSignatures = linkViaSignatures,
|
generateSignatures = linkViaSignatures,
|
||||||
commonMemberStorage = commonMemberStorage,
|
commonMemberStorage = commonMemberStorage,
|
||||||
initializedIrBuiltIns = irBuiltIns
|
initializedIrBuiltIns = irBuiltIns
|
||||||
|
|||||||
+2
-2
@@ -50,7 +50,7 @@ import org.jetbrains.kotlin.fir.languageVersionSettings
|
|||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||||
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
||||||
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize
|
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||||
@@ -275,7 +275,7 @@ class IncrementalFirJvmCompilerRunner(
|
|||||||
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
val extensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
|
||||||
val irGenerationExtensions =
|
val irGenerationExtensions =
|
||||||
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
|
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
|
||||||
val platformIrOutput = cycleResult.convertToIrAndActualize(extensions, irGenerationExtensions, linkViaSignatures = false)
|
val platformIrOutput = cycleResult.convertToIrAndActualizeForJvm(extensions, irGenerationExtensions, linkViaSignatures = false)
|
||||||
|
|
||||||
performanceManager?.notifyIRTranslationFinished()
|
performanceManager?.notifyIRTranslationFinished()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user