Drop more usages of IrDeclaration.descriptor from ObjCExportCodeGenerator
This commit is contained in:
committed by
Vasily Levchenko
parent
4080a852e1
commit
8519be28b4
+4
-4
@@ -62,7 +62,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
|||||||
// builtClasses.forEach { it.addFakeOverrides() }
|
// builtClasses.forEach { it.addFakeOverrides() }
|
||||||
}
|
}
|
||||||
|
|
||||||
class FunctionalInterface(val irClass: IrClass, val arity: Int)
|
class FunctionalInterface(val irClass: IrClass, val descriptor: FunctionClassDescriptor, val arity: Int)
|
||||||
|
|
||||||
fun buildAllClasses() {
|
fun buildAllClasses() {
|
||||||
val maxArity = 255 // See [BuiltInFictitiousFunctionClassFactory].
|
val maxArity = 255 // See [BuiltInFictitiousFunctionClassFactory].
|
||||||
@@ -112,10 +112,10 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
|||||||
|
|
||||||
val builtClasses get() = builtClassesMap.values
|
val builtClasses get() = builtClassesMap.values
|
||||||
|
|
||||||
val builtFunctionNClasses get() = builtClassesMap.values.mapNotNull {
|
val builtFunctionNClasses get() = builtClassesMap.entries.mapNotNull { (descriptor, irClass) ->
|
||||||
with(it.descriptor as FunctionClassDescriptor) {
|
with(descriptor) {
|
||||||
if (functionKind == FunctionClassKind.Function)
|
if (functionKind == FunctionClassKind.Function)
|
||||||
FunctionalInterface(it, arity)
|
FunctionalInterface(irClass, descriptor, arity)
|
||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-6
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.konan.serialization.resolveFakeOverrideMaybe
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.konan.CompiledKlibModuleOrigin
|
import org.jetbrains.kotlin.descriptors.konan.CompiledKlibModuleOrigin
|
||||||
import org.jetbrains.kotlin.descriptors.konan.CurrentKlibModuleOrigin
|
import org.jetbrains.kotlin.descriptors.konan.CurrentKlibModuleOrigin
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrClassReference
|
import org.jetbrains.kotlin.ir.expressions.IrClassReference
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrVararg
|
import org.jetbrains.kotlin.ir.expressions.IrVararg
|
||||||
@@ -372,10 +373,15 @@ internal class ObjCExportCodeGenerator(
|
|||||||
private val objCClassForAny = ObjCClassForKotlinClass(
|
private val objCClassForAny = ObjCClassForKotlinClass(
|
||||||
namer.kotlinAnyName.binaryName,
|
namer.kotlinAnyName.binaryName,
|
||||||
symbols.any,
|
symbols.any,
|
||||||
methods = listOf("equals", "hashCode", "toString").map { name ->
|
methods = listOf("equals", "hashCode", "toString").map { nameString ->
|
||||||
symbols.any.owner.simpleFunctions().single { it.name == Name.identifier(name) }
|
val name = Name.identifier(nameString)
|
||||||
}.map {
|
|
||||||
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, it.symbol, it.descriptor)
|
val irFunction = symbols.any.owner.simpleFunctions().single { it.name == name }
|
||||||
|
|
||||||
|
val descriptor = context.builtIns.any.unsubstitutedMemberScope
|
||||||
|
.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
||||||
|
|
||||||
|
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, irFunction.symbol, descriptor)
|
||||||
ObjCMethodForKotlinMethod(baseMethod)
|
ObjCMethodForKotlinMethod(baseMethod)
|
||||||
},
|
},
|
||||||
categoryMethods = emptyList(),
|
categoryMethods = emptyList(),
|
||||||
@@ -631,7 +637,7 @@ private fun ObjCExportCodeGenerator.generateContinuationToCompletionConverter(
|
|||||||
|
|
||||||
private val ObjCExportBlockCodeGenerator.mappedFunctionNClasses get() =
|
private val ObjCExportBlockCodeGenerator.mappedFunctionNClasses get() =
|
||||||
context.ir.symbols.functionIrClassFactory.builtFunctionNClasses
|
context.ir.symbols.functionIrClassFactory.builtFunctionNClasses
|
||||||
.filter { it.irClass.descriptor.isMappedFunctionClass() }
|
.filter { it.descriptor.isMappedFunctionClass() }
|
||||||
|
|
||||||
private fun ObjCExportBlockCodeGenerator.emitFunctionConverters() {
|
private fun ObjCExportBlockCodeGenerator.emitFunctionConverters() {
|
||||||
require(context.producedLlvmModuleContainsStdlib)
|
require(context.producedLlvmModuleContainsStdlib)
|
||||||
@@ -1428,7 +1434,7 @@ private fun ObjCExportCodeGenerator.createDirectAdapters(
|
|||||||
private fun findImplementation(irClass: IrClass, method: IrSimpleFunction, context: Context): IrSimpleFunction? {
|
private fun findImplementation(irClass: IrClass, method: IrSimpleFunction, context: Context): IrSimpleFunction? {
|
||||||
val override = irClass.simpleFunctions().singleOrNull {
|
val override = irClass.simpleFunctions().singleOrNull {
|
||||||
method in it.allOverriddenFunctions
|
method in it.allOverriddenFunctions
|
||||||
} ?: error("no implementation for ${method.descriptor}\nin ${irClass.descriptor}")
|
} ?: error("no implementation for ${method.render()}\nin ${irClass.fqNameWhenAvailable}")
|
||||||
return OverriddenFunctionInfo(override, method).getImplementation(context)
|
return OverriddenFunctionInfo(override, method).getImplementation(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user