diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt index 01b8170d3ef..9894a80fa2c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.psi2ir.PsiSourceManager @@ -35,21 +36,21 @@ object JvmBackendFacade { fun doGenerateFiles(files: Collection, state: GenerationState, phaseConfig: PhaseConfig) { val extensions = JvmGeneratorExtensions() val mangler = JvmManglerDesc(MainFunctionDetector(state.bindingContext, state.languageVersionSettings)) - val signaturer = JvmIdSignatureDescriptor(mangler) - val psi2ir = Psi2IrTranslator(state.languageVersionSettings, signaturer = signaturer) - val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, JvmNameProvider, extensions = extensions) + val psi2ir = Psi2IrTranslator(state.languageVersionSettings, Psi2IrConfiguration()) + val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), JvmNameProvider) + val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, symbolTable, extensions) val pluginExtensions = IrGenerationExtension.getInstances(state.project) - val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, psi2irContext.symbolTable) + val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, symbolTable) psi2irContext.irBuiltIns.functionFactory = functionFactory val stubGenerator = DeclarationStubGenerator( - psi2irContext.moduleDescriptor, psi2irContext.symbolTable, psi2irContext.irBuiltIns.languageVersionSettings, extensions + psi2irContext.moduleDescriptor, symbolTable, psi2irContext.irBuiltIns.languageVersionSettings, extensions ) val irLinker = JvmIrLinker( psi2irContext.moduleDescriptor, EmptyLoggingContext, psi2irContext.irBuiltIns, - psi2irContext.symbolTable, + symbolTable, functionFactory, stubGenerator, mangler diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt index 937d64a3edb..37ad971ff13 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt @@ -21,6 +21,7 @@ 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.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.linkage.IrDeserializer import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.symbols.IrSymbol @@ -37,8 +38,7 @@ typealias Psi2IrPostprocessingStep = (IrModuleFragment) -> Unit class Psi2IrTranslator( val languageVersionSettings: LanguageVersionSettings, - val configuration: Psi2IrConfiguration = Psi2IrConfiguration(), - val signaturer: IdSignatureComposer + val configuration: Psi2IrConfiguration, ) { private val postprocessingSteps = SmartList() @@ -46,31 +46,28 @@ class Psi2IrTranslator( postprocessingSteps.add(step) } - // NOTE: used only for test purpose - fun generateModule( - moduleDescriptor: ModuleDescriptor, - ktFiles: Collection, - bindingContext: BindingContext, - generatorExtensions: GeneratorExtensions, - nameProvider: NameProvider = NameProvider.DEFAULT - ): IrModuleFragment { - val context = createGeneratorContext(moduleDescriptor, bindingContext, nameProvider, extensions = generatorExtensions) - val irProviders = generateTypicalIrProviderList( - moduleDescriptor, context.irBuiltIns, context.symbolTable, extensions = generatorExtensions - ) - return generateModuleFragment(context, ktFiles, irProviders, emptyList()) - } - fun createGeneratorContext( moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext, - nameProvider: NameProvider = NameProvider.DEFAULT, - symbolTable: SymbolTable = SymbolTable(signaturer, nameProvider), + symbolTable: SymbolTable, extensions: GeneratorExtensions = GeneratorExtensions() - ): GeneratorContext = - createGeneratorContext( - configuration, moduleDescriptor, bindingContext, languageVersionSettings, symbolTable, extensions + ): GeneratorContext { + val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns, extensions = extensions) + val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) + typeTranslator.constantValueGenerator = constantValueGenerator + constantValueGenerator.typeTranslator = typeTranslator + return GeneratorContext( + configuration, + moduleDescriptor, + bindingContext, + languageVersionSettings, + symbolTable, + extensions, + typeTranslator, + constantValueGenerator, + IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable), ) + } fun generateModuleFragment( context: GeneratorContext, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt index a4e7557f076..716c4270f38 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.ir.builders.IrGeneratorContext import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.IrDeclarationReference import org.jetbrains.kotlin.ir.util.ConstantValueGenerator -import org.jetbrains.kotlin.ir.util.IdSignatureComposer import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration @@ -22,33 +21,6 @@ import org.jetbrains.kotlin.psi2ir.PsiSourceManager import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.storage.LockBasedStorageManager -fun createGeneratorContext( - configuration: Psi2IrConfiguration, - moduleDescriptor: ModuleDescriptor, - bindingContext: BindingContext, - languageVersionSettings: LanguageVersionSettings, - symbolTable: SymbolTable, - extensions: GeneratorExtensions -): GeneratorContext { - val typeTranslator = TypeTranslator( - symbolTable, languageVersionSettings, builtIns = moduleDescriptor.builtIns, extensions = extensions - ) - val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) - typeTranslator.constantValueGenerator = constantValueGenerator - constantValueGenerator.typeTranslator = typeTranslator - return GeneratorContext( - configuration, - moduleDescriptor, - bindingContext, - languageVersionSettings, - symbolTable, - extensions, - typeTranslator, - constantValueGenerator, - IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) - ) -} - class GeneratorContext( val configuration: Psi2IrConfiguration, val moduleDescriptor: ModuleDescriptor, diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index 74201710f85..c865e52923c 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideChecker import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy @@ -57,8 +56,6 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext -import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions -import org.jetbrains.kotlin.psi2ir.generators.createGeneratorContext import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContextUtils import org.jetbrains.kotlin.storage.LockBasedStorageManager @@ -288,18 +285,10 @@ fun loadIr( } private fun runAnalysisAndPreparePsi2Ir(depsDescriptors: ModulesStructure): GeneratorContext { - val analysisResult = depsDescriptors.runAnalysis() - val mangler = JsManglerDesc - val signaturer = IdSignatureDescriptor(mangler) - - return createGeneratorContext( - Psi2IrConfiguration(), - analysisResult.moduleDescriptor, - analysisResult.bindingContext, - depsDescriptors.compilerConfiguration.languageVersionSettings, - SymbolTable(signaturer), - GeneratorExtensions() - ) + val (bindingContext, moduleDescriptor) = depsDescriptors.runAnalysis() + val psi2Ir = Psi2IrTranslator(depsDescriptors.compilerConfiguration.languageVersionSettings, Psi2IrConfiguration()) + val symbolTable = SymbolTable(IdSignatureDescriptor(JsManglerDesc)) + return psi2Ir.createGeneratorContext(moduleDescriptor, bindingContext, symbolTable) } fun GeneratorContext.generateModuleFragmentWithPlugins( @@ -308,8 +297,7 @@ fun GeneratorContext.generateModuleFragmentWithPlugins( irLinker: IrDeserializer, expectDescriptorToSymbol: MutableMap? = null ): IrModuleFragment { - val signaturer = IdSignatureDescriptor(JsManglerDesc) - val psi2Ir = Psi2IrTranslator(languageVersionSettings, configuration, signaturer) + val psi2Ir = Psi2IrTranslator(languageVersionSettings, configuration) val extensions = IrGenerationExtension.getInstances(project) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt index 006c03c028a..04503666335 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt @@ -26,6 +26,9 @@ import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.util.NameProvider +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration @@ -85,11 +88,8 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { protected open fun generateIrModule(ignoreErrors: Boolean = false): IrModuleFragment { assert(myFiles != null) { "myFiles not initialized" } assert(myEnvironment != null) { "myEnvironment not initialized" } - val mangler = JsManglerDesc - val signaturer = IdSignatureDescriptor(mangler) - return doGenerateIrModule(Psi2IrTranslator(myEnvironment.configuration.languageVersionSettings, - Psi2IrConfiguration(ignoreErrors), - signaturer)) + val psi2Ir = Psi2IrTranslator(myEnvironment.configuration.languageVersionSettings, Psi2IrConfiguration(ignoreErrors)) + return doGenerateIrModule(psi2Ir) } protected open fun doGenerateIrModule(psi2IrTranslator: Psi2IrTranslator): IrModuleFragment = @@ -133,13 +133,21 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { ktFilesToAnalyze: List, generatorExtensions: GeneratorExtensions ): IrModuleFragment { + val (bindingContext, moduleDescriptor) = analysisResult if (!psi2ir.configuration.ignoreErrors) { analysisResult.throwIfError() - AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext) + AnalyzingUtils.throwExceptionOnErrors(bindingContext) } - return psi2ir.generateModule( - analysisResult.moduleDescriptor, ktFilesToAnalyze, analysisResult.bindingContext, generatorExtensions + val context = psi2ir.createGeneratorContext( + moduleDescriptor, + bindingContext, + SymbolTable(IdSignatureDescriptor(JsManglerDesc), NameProvider.DEFAULT), + generatorExtensions ) + val irProviders = generateTypicalIrProviderList( + moduleDescriptor, context.irBuiltIns, context.symbolTable, extensions = generatorExtensions + ) + return psi2ir.generateModuleFragment(context, ktFilesToAnalyze, irProviders, emptyList()) } } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt index 73c5e6f8fff..dff89f48a9e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt @@ -42,9 +42,9 @@ import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.library.KotlinLibraryVersioning import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.library.KotlinLibrary +import org.jetbrains.kotlin.library.KotlinLibraryVersioning import org.jetbrains.kotlin.library.SerializedIrModule import org.jetbrains.kotlin.library.impl.BuiltInsPlatform import org.jetbrains.kotlin.library.impl.KotlinLibraryOnlyIrWriter @@ -53,8 +53,6 @@ import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStat import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator -import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions -import org.jetbrains.kotlin.psi2ir.generators.createGeneratorContext import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource import org.jetbrains.kotlin.serialization.js.ModuleKind @@ -448,19 +446,9 @@ class GenerateIrRuntime { } private fun doPsi2Ir(files: List, analysisResult: AnalysisResult): IrModuleFragment { - val psi2IrConfiguration = Psi2IrConfiguration() - val mangler = JsManglerDesc - val signaturer = IdSignatureDescriptor(mangler) - val symbolTable = SymbolTable(signaturer) - val generatorExtensions = GeneratorExtensions() - val psi2IrContext = createGeneratorContext( - psi2IrConfiguration, - analysisResult.moduleDescriptor, - analysisResult.bindingContext, - languageVersionSettings, - symbolTable, - generatorExtensions - ) + val psi2Ir = Psi2IrTranslator(languageVersionSettings, Psi2IrConfiguration()) + val symbolTable = SymbolTable(IdSignatureDescriptor(JsManglerDesc)) + val psi2IrContext = psi2Ir.createGeneratorContext(analysisResult.moduleDescriptor, analysisResult.bindingContext, symbolTable) val irBuiltIns = psi2IrContext.irBuiltIns val functionFactory = IrFunctionFactory(irBuiltIns, psi2IrContext.symbolTable) @@ -477,7 +465,7 @@ class GenerateIrRuntime { val irProviders = listOf(irLinker) - val psi2IrTranslator = Psi2IrTranslator(languageVersionSettings, psi2IrContext.configuration, signaturer) + val psi2IrTranslator = Psi2IrTranslator(languageVersionSettings, psi2IrContext.configuration) return psi2IrTranslator.generateModuleFragment(psi2IrContext, files, irProviders, emptyList(), null) } diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt index 3c16d3d0fb7..584d28f457c 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.scripting.repl.js -import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport @@ -18,12 +17,12 @@ import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.generateJsCode -import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc import org.jetbrains.kotlin.ir.backend.js.utils.NameTables import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.js.config.JSConfigurationKeys +import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplCodeAnalyzerBase import org.jetbrains.kotlin.serialization.js.ModuleKind @@ -58,12 +57,9 @@ class JsCoreScriptingCompiler( } val files = listOf(snippetKtFile) - val module = analysisResult.moduleDescriptor - val bindingContext = analysisResult.bindingContext - val mangler = JsManglerDesc - val signaturer = IdSignatureDescriptor(mangler) - val psi2ir = Psi2IrTranslator(environment.configuration.languageVersionSettings, signaturer = signaturer) - val psi2irContext = psi2ir.createGeneratorContext(module, bindingContext, symbolTable = symbolTable) + val (bindingContext, module) = analysisResult + val psi2ir = Psi2IrTranslator(environment.configuration.languageVersionSettings, Psi2IrConfiguration()) + val psi2irContext = psi2ir.createGeneratorContext(module, bindingContext, symbolTable) val providers = generateTypicalIrProviderList(module, psi2irContext.irBuiltIns, psi2irContext.symbolTable) val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files, providers, emptyList(), null) // TODO: deserializer