diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index 39147c79165..4aaa659b887 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -206,8 +206,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, private val val intAnd = getBinaryOperator(OperatorNameConventions.AND, builtIns.intType, builtIns.intType) val intPlusInt = getBinaryOperator(OperatorNameConventions.PLUS, builtIns.intType, builtIns.intType) - open fun functionN(n: Int): IrClassSymbol = symbolTable.lazyWrapper.referenceClass(builtIns.getFunction(n)) - open fun suspendFunctionN(n: Int): IrClassSymbol = symbolTable.lazyWrapper.referenceClass(builtIns.getSuspendFunction(n)) + open fun functionN(n: Int): IrClassSymbol = irBuiltIns.function(n) + open fun suspendFunctionN(n: Int): IrClassSymbol = irBuiltIns.suspendFunction(n) fun kproperty0(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty0) fun kproperty1(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty1) 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 ceb140e531a..118f88aaa57 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 @@ -38,6 +38,7 @@ object JvmBackendFacade { val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, JvmNameProvider, extensions = extensions) val pluginExtensions = IrGenerationExtension.getInstances(state.project) val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, psi2irContext.symbolTable) + psi2irContext.irBuiltIns.functionFactory = functionFactory for (extension in pluginExtensions) { psi2ir.addPostprocessingStep { module -> diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 0b4abc9cad9..506d9ad65e7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -342,8 +342,7 @@ class JvmSymbols( } } - fun getFunction(parameterCount: Int): IrClassSymbol = - symbolTable.referenceClass(builtIns.getFunction(parameterCount)) + fun getFunction(parameterCount: Int): IrClassSymbol = irBuiltIns.function(parameterCount) private val jvmFunctionClasses = storageManager.createMemoizedFunction { n: Int -> createFunctionClass(n, false) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index 0a7cf6e58c8..34653c94edd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -40,6 +40,8 @@ class IrBuiltIns( ) { val languageVersionSettings = typeTranslator.languageVersionSettings + lateinit var functionFactory: IrAbstractFunctionFactory + private val builtInsModule = builtIns.builtInsModule private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN) @@ -295,6 +297,12 @@ class IrBuiltIns( val dataClassArrayMemberToStringSymbol = defineOperator("dataClassArrayMemberToString", stringType, listOf(anyNType)) val dataClassArrayMemberToString = dataClassArrayMemberToStringSymbol.descriptor + fun function(n: Int): IrClassSymbol = functionFactory.functionN(n).symbol + fun suspendFunction(n: Int): IrClassSymbol = functionFactory.suspendFunctionN(n).symbol + + fun kFunction(n: Int): IrClassSymbol = functionFactory.kFunctionN(n).symbol + fun kSuspendFunction(n: Int): IrClassSymbol = functionFactory.kSuspendFunctionN(n).symbol + companion object { val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir") val BUILTIN_OPERATOR = object : IrDeclarationOriginImpl("OPERATOR") {} 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 2b9085446e1..893fb650390 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 @@ -138,6 +138,7 @@ fun generateKLib( val psi2IrContext = runAnalysisAndPreparePsi2Ir(depsDescriptors) val irBuiltIns = psi2IrContext.irBuiltIns val functionFactory = IrFunctionFactory(irBuiltIns, psi2IrContext.symbolTable) + irBuiltIns.functionFactory = functionFactory val expectDescriptorToSymbol = mutableMapOf() @@ -211,6 +212,7 @@ fun loadIr( val irBuiltIns = psi2IrContext.irBuiltIns val symbolTable = psi2IrContext.symbolTable val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) + irBuiltIns.functionFactory = functionFactory val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) @@ -253,6 +255,7 @@ fun loadIr( irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it), it, strategy) } + irBuiltIns.functionFactory = functionFactory val moduleFragment = deserializedModuleFragments.last() 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 126d1325ba9..a77a84dcb30 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 @@ -51,6 +51,7 @@ class JsScriptDependencyCompiler( val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) + irBuiltIns.functionFactory = functionFactory val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) val moduleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)