[K/N] Replace SymbolName with GCUnsafeCall in interop

This commit is contained in:
Pavel Kunyavskiy
2021-09-03 17:12:52 +03:00
committed by Space
parent 91c6ee1ebb
commit ca9ec76c08
5 changed files with 8 additions and 4 deletions
@@ -123,7 +123,8 @@ class SimpleBridgeGeneratorImpl(
val externCPrefix = if (libraryForCStubs.language == Language.CPP) "extern \"C\" " else ""
val functionName = pkgName.replace(INVALID_CLANG_IDENTIFIER_REGEX, "_") + "_$kotlinFunctionName"
if (independent) kotlinLines.add("@" + topLevelKotlinScope.reference(KotlinTypes.independent))
kotlinLines.add("@SymbolName(${functionName.quoteAsKotlinLiteral()})")
// TODO: this should be separate annotation
kotlinLines.add("@GCUnsafeCall(${functionName.quoteAsKotlinLiteral()})")
"$externCPrefix$cReturnType $functionName ($joinedCParameters)"
}
}
@@ -581,7 +581,7 @@ private fun KotlinStubs.createFakeKotlinExternalFunction(
)
bridge.annotations += buildSimpleAnnotation(irBuiltIns, UNDEFINED_OFFSET, UNDEFINED_OFFSET,
symbols.symbolName.owner, cFunctionName)
symbols.gcUnsafeCall.owner, cFunctionName)
if (isObjCMethod) {
val methodInfo = signature.getObjCMethodInfo()!!
@@ -130,8 +130,9 @@ private fun createKotlinBridge(
isInfix = false
)
if (isExternal) {
// TODO this should be separate annotation
bridge.annotations += buildSimpleAnnotation(stubs.irBuiltIns, startOffset, endOffset,
stubs.symbols.symbolName.owner, cBridgeName)
stubs.symbols.gcUnsafeCall.owner, cBridgeName)
bridge.annotations += buildSimpleAnnotation(stubs.irBuiltIns, startOffset, endOffset,
stubs.symbols.filterExceptions.owner,
foreignExceptionMode.value)
@@ -110,6 +110,7 @@ internal class KonanSymbols(
val arrayList = symbolTable.referenceClass(getArrayListClassDescriptor(context))
val symbolName = topLevelClass(RuntimeNames.symbolNameAnnotation)
val gcUnsafeCall = topLevelClass(KonanFqNames.gcUnsafeCall)
val filterExceptions = topLevelClass(RuntimeNames.filterExceptions)
val exportForCppRuntime = topLevelClass(RuntimeNames.exportForCppRuntime)
@@ -2487,7 +2487,8 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
val result = context.memoryModel == MemoryModel.EXPERIMENTAL && origin == CBridgeOrigin.KOTLIN_TO_C_BRIDGE
if (result) {
check(isExternal)
check(!annotations.hasAnnotation(KonanFqNames.gcUnsafeCall))
// TODO: this should be separate annotation
// check(!annotations.hasAnnotation(KonanFqNames.gcUnsafeCall))
check(annotations.hasAnnotation(RuntimeNames.filterExceptions))
}
return result