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)
|
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) {
|
objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null)
|
||||||
spec.types.forEach {
|
|
||||||
|
spec?.types?.forEach {
|
||||||
objCTypeAdapters += when (it) {
|
objCTypeAdapters += when (it) {
|
||||||
is ObjCClassForKotlinClass -> {
|
is ObjCClassForKotlinClass -> {
|
||||||
val superClass = it.superClassNotAny ?: objCClassForAny
|
val superClass = it.superClassNotAny ?: objCClassForAny
|
||||||
@@ -248,13 +250,17 @@ internal class ObjCExportCodeGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.files.forEach {
|
spec?.files?.forEach {
|
||||||
objCTypeAdapters += createTypeAdapterForFileClass(it)
|
objCTypeAdapters += createTypeAdapterForFileClass(it)
|
||||||
dataGenerator.emitEmptyClass(it.binaryName, namer.kotlinAnyName.binaryName)
|
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 {
|
NSNumberKind.values().mapNotNull { it.mappedKotlinClassId }.forEach {
|
||||||
dataGenerator.exportClass(namer.numberBoxName(it).binaryName)
|
dataGenerator.exportClass(namer.numberBoxName(it).binaryName)
|
||||||
}
|
}
|
||||||
@@ -264,10 +270,6 @@ internal class ObjCExportCodeGenerator(
|
|||||||
|
|
||||||
emitSpecialClassesConvertions()
|
emitSpecialClassesConvertions()
|
||||||
|
|
||||||
objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null)
|
|
||||||
|
|
||||||
emitTypeAdapters()
|
|
||||||
|
|
||||||
// Replace runtime global with weak linkage:
|
// Replace runtime global with weak linkage:
|
||||||
replaceExternalWeakOrCommonGlobal(
|
replaceExternalWeakOrCommonGlobal(
|
||||||
"Kotlin_ObjCInterop_uniquePrefix",
|
"Kotlin_ObjCInterop_uniquePrefix",
|
||||||
@@ -282,7 +284,7 @@ internal class ObjCExportCodeGenerator(
|
|||||||
emitKt42254Hint()
|
emitKt42254Hint()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun emitTypeAdapters() {
|
private fun emitTypeAdapters(objCTypeAdapters: List<ObjCTypeAdapter>) {
|
||||||
val placedClassAdapters = mutableMapOf<String, ConstPointer>()
|
val placedClassAdapters = mutableMapOf<String, ConstPointer>()
|
||||||
val placedInterfaceAdapters = 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) {
|
if (exportedInterface != null) {
|
||||||
produceFrameworkSpecific(exportedInterface.headerLines)
|
produceFrameworkSpecific(exportedInterface.headerLines)
|
||||||
|
|
||||||
objCCodeGenerator.generate(codeSpec!!)
|
|
||||||
|
|
||||||
exportedInterface.generateWorkaroundForSwiftSR10177()
|
exportedInterface.generateWorkaroundForSwiftSR10177()
|
||||||
}
|
}
|
||||||
|
|
||||||
objCCodeGenerator.emitRtti()
|
objCCodeGenerator.generate(codeSpec)
|
||||||
objCCodeGenerator.dispose()
|
objCCodeGenerator.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user