From 8cbb6ff47a5a72dae6d248413920e035116c0e3f Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Thu, 2 Feb 2023 16:59:42 +0100 Subject: [PATCH] [FIR2IR] Use convertToIrAndActualize() for JS CLI --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 65 +++++-------------- .../kotlin/fir/pipeline/convertToIr.kt | 9 ++- 2 files changed, 22 insertions(+), 52 deletions(-) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index 77f210fb2f4..0b7d5633182 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -50,7 +50,10 @@ import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider +import org.jetbrains.kotlin.fir.pipeline.FirResult +import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFir +import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension @@ -604,57 +607,19 @@ class K2JsIrCompiler : CLICompiler() { moduleDescriptor } - val commonMemberStorage = Fir2IrCommonMemberStorage( - generateSignatures = false, - signatureComposerCreator = null, - manglerCreator = { FirJvmKotlinMangler() } // TODO: replace with potentially simpler JS version - ) - - // TODO: replace with appropriate (probably empty) implementation - val specialAnnotationSymbolProvider = Fir2IrJvmSpecialAnnotationSymbolProvider() - - // TODO: consider passing externally - val builtIns = builtInsModule ?: DefaultBuiltIns.Instance - - val commonIrOutput = if (isMppEnabled) { - Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( - commonFirOutput!!.session, commonFirOutput.scopeSession, commonFirOutput.fir, - configuration.languageVersionSettings, - fir2IrExtensions, - JsManglerIr, IrFactoryImpl, - Fir2IrVisibilityConverter.Default, - specialAnnotationSymbolProvider, - IrGenerationExtension.getInstances(environmentForJS.project), - generateSignatures = false, - kotlinBuiltIns = builtIns, - commonMemberStorage = commonMemberStorage, - initializedIrBuiltIns = null - ).also { fir2IrResult -> - (fir2IrResult.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors } - } - } else { - null - } - - val platformIrOutput = Fir2IrConverter.createModuleFragmentWithSignaturesIfNeeded( - platformFirOutput.session, platformFirOutput.scopeSession, platformFirOutput.fir, - configuration.languageVersionSettings, + val firResult = FirResult(platformFirOutput, commonFirOutput) + val irResult = firResult.convertToIrAndActualize( fir2IrExtensions, - JsManglerIr, IrFactoryImpl, - Fir2IrVisibilityConverter.Default, - specialAnnotationSymbolProvider, IrGenerationExtension.getInstances(environmentForJS.project), - generateSignatures = false, - kotlinBuiltIns = builtIns, - commonMemberStorage = commonMemberStorage, - initializedIrBuiltIns = commonIrOutput?.components?.irBuiltIns - ).also { fir2IrResult -> - (fir2IrResult.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors } - } - - if (isMppEnabled) { - IrActualizer.actualize(platformIrOutput.irModuleFragment, listOf(commonIrOutput!!.irModuleFragment)) - } + linkViaSignatures = false, + signatureComposerCreator = null, + irMangler = JsManglerIr, + visibilityConverter = Fir2IrVisibilityConverter.Default, + kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance, + fir2IrResultPostCompute = { + (this.irModuleFragment.descriptor as? FirModuleDescriptor)?.let { it.allDependencyModules = librariesDescriptors } + } + ) // Serialize klib @@ -682,7 +647,7 @@ class K2JsIrCompiler : CLICompiler() { sourceFiles, klibPath = outputKlibPath, resolvedLibraries.map { it.library }, - platformIrOutput.irModuleFragment, + irResult.irModuleFragment, expectDescriptorToSymbol = mutableMapOf(), cleanFiles = icData, nopack = true, diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt index 655c573fc84..f791085c97b 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt @@ -57,6 +57,7 @@ fun FirResult.convertToIrAndActualize( irMangler: KotlinMangler.IrMangler, visibilityConverter: Fir2IrVisibilityConverter, kotlinBuiltIns: KotlinBuiltIns, + fir2IrResultPostCompute: Fir2IrResult.() -> Unit = {}, ): Fir2IrResult { val result: Fir2IrResult @@ -76,7 +77,9 @@ fun FirResult.convertToIrAndActualize( irMangler, visibilityConverter, kotlinBuiltIns, - ) + ).also { + fir2IrResultPostCompute(it) + } result = platformOutput.convertToIr( fir2IrExtensions, irGeneratorExtensions, @@ -86,7 +89,9 @@ fun FirResult.convertToIrAndActualize( irMangler, visibilityConverter, kotlinBuiltIns, - ) + ).also { + fir2IrResultPostCompute(it) + } IrActualizer.actualize( result.irModuleFragment, listOf(commonIrOutput.irModuleFragment)