Consolidate type adapters generation in ObjCExportCodeGenerator
This commit is contained in:
committed by
Vasily Levchenko
parent
8519be28b4
commit
2bd73cc44e
+12
-10
@@ -229,10 +229,12 @@ internal class ObjCExportCodeGenerator(
|
||||
return callFromBridge(conversion.owner.llvmFunction, listOf(value), resultLifetime)
|
||||
}
|
||||
|
||||
private val objCTypeAdapters = mutableListOf<ObjCTypeAdapter>()
|
||||
private fun generateTypeAdapters(spec: ObjCExportCodeSpec?) {
|
||||
val objCTypeAdapters = mutableListOf<ObjCTypeAdapter>()
|
||||
|
||||
internal fun generate(spec: ObjCExportCodeSpec) {
|
||||
spec.types.forEach {
|
||||
objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null)
|
||||
|
||||
spec?.types?.forEach {
|
||||
objCTypeAdapters += when (it) {
|
||||
is ObjCClassForKotlinClass -> {
|
||||
val superClass = it.superClassNotAny ?: objCClassForAny
|
||||
@@ -248,13 +250,17 @@ internal class ObjCExportCodeGenerator(
|
||||
}
|
||||
}
|
||||
|
||||
spec.files.forEach {
|
||||
spec?.files?.forEach {
|
||||
objCTypeAdapters += createTypeAdapterForFileClass(it)
|
||||
dataGenerator.emitEmptyClass(it.binaryName, namer.kotlinAnyName.binaryName)
|
||||
}
|
||||
|
||||
emitTypeAdapters(objCTypeAdapters)
|
||||
}
|
||||
|
||||
internal fun emitRtti() {
|
||||
internal fun generate(spec: ObjCExportCodeSpec?) {
|
||||
generateTypeAdapters(spec)
|
||||
|
||||
NSNumberKind.values().mapNotNull { it.mappedKotlinClassId }.forEach {
|
||||
dataGenerator.exportClass(namer.numberBoxName(it).binaryName)
|
||||
}
|
||||
@@ -264,10 +270,6 @@ internal class ObjCExportCodeGenerator(
|
||||
|
||||
emitSpecialClassesConvertions()
|
||||
|
||||
objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null)
|
||||
|
||||
emitTypeAdapters()
|
||||
|
||||
// Replace runtime global with weak linkage:
|
||||
replaceExternalWeakOrCommonGlobal(
|
||||
"Kotlin_ObjCInterop_uniquePrefix",
|
||||
@@ -282,7 +284,7 @@ internal class ObjCExportCodeGenerator(
|
||||
emitKt42254Hint()
|
||||
}
|
||||
|
||||
private fun emitTypeAdapters() {
|
||||
private fun emitTypeAdapters(objCTypeAdapters: List<ObjCTypeAdapter>) {
|
||||
val placedClassAdapters = mutableMapOf<String, ConstPointer>()
|
||||
val placedInterfaceAdapters = mutableMapOf<String, ConstPointer>()
|
||||
|
||||
|
||||
+1
-3
@@ -96,12 +96,10 @@ internal class ObjCExport(val context: Context, symbolTable: SymbolTable) {
|
||||
if (exportedInterface != null) {
|
||||
produceFrameworkSpecific(exportedInterface.headerLines)
|
||||
|
||||
objCCodeGenerator.generate(codeSpec!!)
|
||||
|
||||
exportedInterface.generateWorkaroundForSwiftSR10177()
|
||||
}
|
||||
|
||||
objCCodeGenerator.emitRtti()
|
||||
objCCodeGenerator.generate(codeSpec)
|
||||
objCCodeGenerator.dispose()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user