Extract function in ObjCExportCodeGenerator

This commit is contained in:
Svyatoslav Scherbina
2020-10-30 09:45:01 +03:00
committed by Stanislav Erokhin
parent d218b88106
commit 740d50ca09
@@ -1123,11 +1123,9 @@ private fun ObjCExportCodeGenerator.createMethodVirtualAdapter(
val selector = namer.getSelector(baseMethod.descriptor) val selector = namer.getSelector(baseMethod.descriptor)
val methodBridge = mapper.bridgeMethod(baseMethod.descriptor) val methodBridge = mapper.bridgeMethod(baseMethod.descriptor)
val objCToKotlin = constPointer(generateObjCImp(baseMethod, baseMethod, methodBridge, isVirtual = true)) val imp = generateObjCImp(baseMethod, baseMethod, methodBridge, isVirtual = true)
selectorsToDefine[selector] = methodBridge return objCToKotlinMethodAdapter(selector, methodBridge, imp)
return ObjCToKotlinMethodAdapter(selector, getEncoding(methodBridge), objCToKotlin)
} }
private fun ObjCExportCodeGenerator.createMethodAdapter( private fun ObjCExportCodeGenerator.createMethodAdapter(
@@ -1148,12 +1146,10 @@ private fun ObjCExportCodeGenerator.createMethodAdapter(
val selectorName = namer.getSelector(request.base.descriptor) val selectorName = namer.getSelector(request.base.descriptor)
val methodBridge = mapper.bridgeMethod(request.base.descriptor) val methodBridge = mapper.bridgeMethod(request.base.descriptor)
val objCEncoding = getEncoding(methodBridge)
val objCToKotlin = constPointer(generateObjCImp(request.implementation, request.base, methodBridge))
selectorsToDefine[selectorName] = methodBridge val imp = generateObjCImp(request.implementation, request.base, methodBridge)
ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin) objCToKotlinMethodAdapter(selectorName, methodBridge, imp)
} }
private fun ObjCExportCodeGenerator.createConstructorAdapter( private fun ObjCExportCodeGenerator.createConstructorAdapter(
@@ -1165,12 +1161,9 @@ private fun ObjCExportCodeGenerator.createArrayConstructorAdapter(
): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter { ): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
val selectorName = namer.getSelector(irConstructor.descriptor) val selectorName = namer.getSelector(irConstructor.descriptor)
val methodBridge = mapper.bridgeMethod(irConstructor.descriptor) val methodBridge = mapper.bridgeMethod(irConstructor.descriptor)
val objCEncoding = getEncoding(methodBridge) val imp = generateObjCImpForArrayConstructor(irConstructor, methodBridge)
val objCToKotlin = constPointer(generateObjCImpForArrayConstructor(irConstructor, methodBridge))
selectorsToDefine[selectorName] = methodBridge return objCToKotlinMethodAdapter(selectorName, methodBridge, imp)
return ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin)
} }
private fun ObjCExportCodeGenerator.vtableIndex(irFunction: IrSimpleFunction): Int? { private fun ObjCExportCodeGenerator.vtableIndex(irFunction: IrSimpleFunction): Int? {
@@ -1424,16 +1417,23 @@ private inline fun ObjCExportCodeGenerator.generateObjCToKotlinSyntheticGetter(
MethodBridgeReceiver.Static, valueParameters = emptyList() MethodBridgeReceiver.Static, valueParameters = emptyList()
) )
val encoding = getEncoding(methodBridge)
val imp = generateFunction(codegen, objCFunctionType(context, methodBridge), "objc2kotlin") { val imp = generateFunction(codegen, objCFunctionType(context, methodBridge), "objc2kotlin") {
block() block()
} }
LLVMSetLinkage(imp, LLVMLinkage.LLVMPrivateLinkage) LLVMSetLinkage(imp, LLVMLinkage.LLVMPrivateLinkage)
return objCToKotlinMethodAdapter(selector, methodBridge, imp)
}
private fun ObjCExportCodeGenerator.objCToKotlinMethodAdapter(
selector: String,
methodBridge: MethodBridge,
imp: LLVMValueRef
): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
selectorsToDefine[selector] = methodBridge selectorsToDefine[selector] = methodBridge
return ObjCToKotlinMethodAdapter(selector, encoding, constPointer(imp)) return ObjCToKotlinMethodAdapter(selector, getEncoding(methodBridge), constPointer(imp))
} }
private fun ObjCExportCodeGenerator.createUnitInstanceAdapter() = private fun ObjCExportCodeGenerator.createUnitInstanceAdapter() =