From a477aa7289b819a47bbad223410d668ddf40197c Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Mon, 20 Apr 2020 14:15:43 +0300 Subject: [PATCH] [KLIB] Pass IrFunctionFactory from outside --- .../kotlin/backend/jvm/JvmBackendFacade.kt | 10 +++++++++- .../org/jetbrains/kotlin/ir/backend/js/klib.kt | 18 +++++++++++++++--- .../js/lower/serialization/ir/JsIrLinker.kt | 8 +++++--- .../backend/jvm/serialization/JvmIrLinker.kt | 4 +--- .../repl/js/JsScriptDependencyCompiler.kt | 4 +++- 5 files changed, 33 insertions(+), 11 deletions(-) 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 c41b02780b3..ceb140e531a 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 @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.psi.KtFile @@ -36,6 +37,7 @@ object JvmBackendFacade { val psi2ir = Psi2IrTranslator(state.languageVersionSettings, signaturer = signaturer) val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, JvmNameProvider, extensions = extensions) val pluginExtensions = IrGenerationExtension.getInstances(state.project) + val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, psi2irContext.symbolTable) for (extension in pluginExtensions) { psi2ir.addPostprocessingStep { module -> @@ -57,7 +59,13 @@ object JvmBackendFacade { psi2irContext.moduleDescriptor, psi2irContext.symbolTable, psi2irContext.irBuiltIns.languageVersionSettings, extensions ) val irLinker = JvmIrLinker( - psi2irContext.moduleDescriptor, EmptyLoggingContext, psi2irContext.irBuiltIns, psi2irContext.symbolTable, stubGenerator, mangler + psi2irContext.moduleDescriptor, + EmptyLoggingContext, + psi2irContext.irBuiltIns, + psi2irContext.symbolTable, + functionFactory, + stubGenerator, + mangler ) val dependencies = psi2irContext.moduleDescriptor.allDependencyModules.map { val kotlinLibrary = (it.getCapability(KlibModuleOrigin.CAPABILITY) as? DeserializedKlibModuleOrigin)?.library 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 6c1442b5872..2b9085446e1 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 @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.KlibMetadataIncrementalSerializer import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.acceptVoid @@ -135,10 +136,19 @@ fun generateKLib( ModulesStructure(project, MainModule.SourceFiles(files), analyzer, configuration, allDependencies, friendDependencies) val psi2IrContext = runAnalysisAndPreparePsi2Ir(depsDescriptors) + val irBuiltIns = psi2IrContext.irBuiltIns + val functionFactory = IrFunctionFactory(irBuiltIns, psi2IrContext.symbolTable) val expectDescriptorToSymbol = mutableMapOf() - val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, psi2IrContext.irBuiltIns, psi2IrContext.symbolTable, serializedIrFiles) + val irLinker = JsIrLinker( + psi2IrContext.moduleDescriptor, + emptyLoggingContext, + psi2IrContext.irBuiltIns, + psi2IrContext.symbolTable, + functionFactory, + serializedIrFiles + ) val deserializedModuleFragments = sortDependencies(allDependencies.getFullList(), depsDescriptors.descriptors).map { irLinker.deserializeOnlyHeaderModule(depsDescriptors.getModuleDescriptor(it), it) @@ -200,8 +210,9 @@ fun loadIr( val psi2IrContext: GeneratorContext = runAnalysisAndPreparePsi2Ir(depsDescriptors) val irBuiltIns = psi2IrContext.irBuiltIns val symbolTable = psi2IrContext.symbolTable + val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) - val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, null) + val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) val deserializedModuleFragments = sortDependencies(allDependencies.getFullList(), depsDescriptors.descriptors).map { irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it), it) @@ -230,7 +241,8 @@ fun loadIr( typeTranslator.constantValueGenerator = constantValueGenerator constantValueGenerator.typeTranslator = typeTranslator val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) - val irLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, null) + val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) + val irLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) val deserializedModuleFragments = sortDependencies(allDependencies.getFullList(), depsDescriptors.descriptors).map { val strategy = diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt index 6589211cba9..549eaefec77 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt @@ -20,11 +20,13 @@ import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.library.IrLibrary import org.jetbrains.kotlin.library.SerializedIrFile -class JsIrLinker(currentModule: ModuleDescriptor?, logger: LoggingContext, builtIns: IrBuiltIns, symbolTable: SymbolTable, private val icData: List? = null) : +class JsIrLinker( + currentModule: ModuleDescriptor?, logger: LoggingContext, builtIns: IrBuiltIns, symbolTable: SymbolTable, + override val functionalInteraceFactory: IrAbstractFunctionFactory, + private val icData: List? = null +) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, emptyList()) { - override val functionalInteraceFactory: IrAbstractFunctionFactory = IrFunctionFactory(builtIns, symbolTable) - override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = moduleDescriptor === moduleDescriptor.builtIns.builtInsModule diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt index e3296cf900b..8cbdfe018fb 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt @@ -25,11 +25,9 @@ import org.jetbrains.kotlin.load.java.descriptors.* import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment import org.jetbrains.kotlin.name.Name -class JvmIrLinker(currentModule: ModuleDescriptor?, logger: LoggingContext, builtIns: IrBuiltIns, symbolTable: SymbolTable, private val stubGenerator: DeclarationStubGenerator, private val manglerDesc: JvmManglerDesc) : +class JvmIrLinker(currentModule: ModuleDescriptor?, logger: LoggingContext, builtIns: IrBuiltIns, symbolTable: SymbolTable, override val functionalInteraceFactory: IrAbstractFunctionFactory, private val stubGenerator: DeclarationStubGenerator, private val manglerDesc: JvmManglerDesc) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, emptyList()) { - override val functionalInteraceFactory: IrAbstractFunctionFactory = IrFunctionFactory(builtIns, symbolTable) - private val javaName = Name.identifier("java") override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt index 9f9e35bd53b..126d1325ba9 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt @@ -22,6 +22,7 @@ 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.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.name.Name @@ -49,7 +50,8 @@ class JsScriptDependencyCompiler( } val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable) - val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, null) + val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) + val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) val moduleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns) val irDependencies = dependencies.map { jsLinker.deserializeFullModule(it, it.kotlinLibrary) }