[IR] Add new API into IrBuiltIns to access functional interfaces
This commit is contained in:
@@ -206,8 +206,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, private val
|
|||||||
val intAnd = getBinaryOperator(OperatorNameConventions.AND, builtIns.intType, builtIns.intType)
|
val intAnd = getBinaryOperator(OperatorNameConventions.AND, builtIns.intType, builtIns.intType)
|
||||||
val intPlusInt = getBinaryOperator(OperatorNameConventions.PLUS, 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 functionN(n: Int): IrClassSymbol = irBuiltIns.function(n)
|
||||||
open fun suspendFunctionN(n: Int): IrClassSymbol = symbolTable.lazyWrapper.referenceClass(builtIns.getSuspendFunction(n))
|
open fun suspendFunctionN(n: Int): IrClassSymbol = irBuiltIns.suspendFunction(n)
|
||||||
|
|
||||||
fun kproperty0(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty0)
|
fun kproperty0(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty0)
|
||||||
fun kproperty1(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty1)
|
fun kproperty1(): IrClassSymbol = symbolTable.referenceClass(builtIns.kProperty1)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ object JvmBackendFacade {
|
|||||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, JvmNameProvider, extensions = extensions)
|
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, JvmNameProvider, extensions = extensions)
|
||||||
val pluginExtensions = IrGenerationExtension.getInstances(state.project)
|
val pluginExtensions = IrGenerationExtension.getInstances(state.project)
|
||||||
val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, psi2irContext.symbolTable)
|
val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, psi2irContext.symbolTable)
|
||||||
|
psi2irContext.irBuiltIns.functionFactory = functionFactory
|
||||||
|
|
||||||
for (extension in pluginExtensions) {
|
for (extension in pluginExtensions) {
|
||||||
psi2ir.addPostprocessingStep { module ->
|
psi2ir.addPostprocessingStep { module ->
|
||||||
|
|||||||
@@ -342,8 +342,7 @@ class JvmSymbols(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFunction(parameterCount: Int): IrClassSymbol =
|
fun getFunction(parameterCount: Int): IrClassSymbol = irBuiltIns.function(parameterCount)
|
||||||
symbolTable.referenceClass(builtIns.getFunction(parameterCount))
|
|
||||||
|
|
||||||
private val jvmFunctionClasses = storageManager.createMemoizedFunction { n: Int ->
|
private val jvmFunctionClasses = storageManager.createMemoizedFunction { n: Int ->
|
||||||
createFunctionClass(n, false)
|
createFunctionClass(n, false)
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ class IrBuiltIns(
|
|||||||
) {
|
) {
|
||||||
val languageVersionSettings = typeTranslator.languageVersionSettings
|
val languageVersionSettings = typeTranslator.languageVersionSettings
|
||||||
|
|
||||||
|
lateinit var functionFactory: IrAbstractFunctionFactory
|
||||||
|
|
||||||
private val builtInsModule = builtIns.builtInsModule
|
private val builtInsModule = builtIns.builtInsModule
|
||||||
|
|
||||||
private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN)
|
private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN)
|
||||||
@@ -295,6 +297,12 @@ class IrBuiltIns(
|
|||||||
val dataClassArrayMemberToStringSymbol = defineOperator("dataClassArrayMemberToString", stringType, listOf(anyNType))
|
val dataClassArrayMemberToStringSymbol = defineOperator("dataClassArrayMemberToString", stringType, listOf(anyNType))
|
||||||
val dataClassArrayMemberToString = dataClassArrayMemberToStringSymbol.descriptor
|
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 {
|
companion object {
|
||||||
val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir")
|
val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir")
|
||||||
val BUILTIN_OPERATOR = object : IrDeclarationOriginImpl("OPERATOR") {}
|
val BUILTIN_OPERATOR = object : IrDeclarationOriginImpl("OPERATOR") {}
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ fun generateKLib(
|
|||||||
val psi2IrContext = runAnalysisAndPreparePsi2Ir(depsDescriptors)
|
val psi2IrContext = runAnalysisAndPreparePsi2Ir(depsDescriptors)
|
||||||
val irBuiltIns = psi2IrContext.irBuiltIns
|
val irBuiltIns = psi2IrContext.irBuiltIns
|
||||||
val functionFactory = IrFunctionFactory(irBuiltIns, psi2IrContext.symbolTable)
|
val functionFactory = IrFunctionFactory(irBuiltIns, psi2IrContext.symbolTable)
|
||||||
|
irBuiltIns.functionFactory = functionFactory
|
||||||
|
|
||||||
val expectDescriptorToSymbol = mutableMapOf<DeclarationDescriptor, IrSymbol>()
|
val expectDescriptorToSymbol = mutableMapOf<DeclarationDescriptor, IrSymbol>()
|
||||||
|
|
||||||
@@ -211,6 +212,7 @@ fun loadIr(
|
|||||||
val irBuiltIns = psi2IrContext.irBuiltIns
|
val irBuiltIns = psi2IrContext.irBuiltIns
|
||||||
val symbolTable = psi2IrContext.symbolTable
|
val symbolTable = psi2IrContext.symbolTable
|
||||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||||
|
irBuiltIns.functionFactory = functionFactory
|
||||||
|
|
||||||
val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null)
|
val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null)
|
||||||
|
|
||||||
@@ -253,6 +255,7 @@ fun loadIr(
|
|||||||
|
|
||||||
irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it), it, strategy)
|
irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it), it, strategy)
|
||||||
}
|
}
|
||||||
|
irBuiltIns.functionFactory = functionFactory
|
||||||
|
|
||||||
val moduleFragment = deserializedModuleFragments.last()
|
val moduleFragment = deserializedModuleFragments.last()
|
||||||
|
|
||||||
|
|||||||
+1
@@ -51,6 +51,7 @@ class JsScriptDependencyCompiler(
|
|||||||
|
|
||||||
val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable)
|
val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable)
|
||||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||||
|
irBuiltIns.functionFactory = functionFactory
|
||||||
val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null)
|
val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null)
|
||||||
|
|
||||||
val moduleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)
|
val moduleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)
|
||||||
|
|||||||
Reference in New Issue
Block a user