[K/N] Use @Escapes for all external funs with escaping arguments

This commit is contained in:
Alexander Shabalin
2024-02-14 14:35:51 +01:00
committed by Space Team
parent 8d81fd6647
commit 4e6451c25e
7 changed files with 16 additions and 13 deletions
@@ -6,9 +6,11 @@
package kotlinx.cinterop package kotlinx.cinterop
import kotlin.native.* import kotlin.native.*
import kotlin.native.internal.Escapes
import kotlin.native.internal.GCUnsafeCall import kotlin.native.internal.GCUnsafeCall
@GCUnsafeCall("Kotlin_Interop_createStablePointer") @GCUnsafeCall("Kotlin_Interop_createStablePointer")
@Escapes(0b01) // any escapes into stable ref.
internal external fun createStablePointer(any: Any): COpaquePointer internal external fun createStablePointer(any: Any): COpaquePointer
@GCUnsafeCall("Kotlin_Interop_disposeStablePointer") @GCUnsafeCall("Kotlin_Interop_disposeStablePointer")
@@ -62,6 +62,7 @@ internal fun CPointer<*>.cPointerToString() = "CPointer(raw=$rawValue)"
*/ */
@ExperimentalForeignApi @ExperimentalForeignApi
@TypedIntrinsic(IntrinsicType.INTEROP_STATIC_C_FUNCTION) @TypedIntrinsic(IntrinsicType.INTEROP_STATIC_C_FUNCTION)
// function is static, so it's never heap allocated anyway; no need to use @Escapes
public external fun <R> staticCFunction(@VolatileLambda function: () -> R): CPointer<CFunction<() -> R>> public external fun <R> staticCFunction(@VolatileLambda function: () -> R): CPointer<CFunction<() -> R>>
@ExperimentalForeignApi @ExperimentalForeignApi
@@ -6,11 +6,7 @@ package kotlin.native
import kotlin.experimental.ExperimentalNativeApi import kotlin.experimental.ExperimentalNativeApi
import kotlin.native.concurrent.InvalidMutabilityException import kotlin.native.concurrent.InvalidMutabilityException
import kotlin.native.internal.ExportForCppRuntime import kotlin.native.internal.*
import kotlin.native.internal.GCUnsafeCall
import kotlin.native.internal.UnhandledExceptionHookHolder
import kotlin.native.internal.runUnhandledExceptionHook
import kotlin.native.internal.ReportUnhandledException
/** /**
* Initializes Kotlin runtime for the current thread, if not inited already. * Initializes Kotlin runtime for the current thread, if not inited already.
@@ -80,6 +76,7 @@ public fun getUnhandledExceptionHook(): ReportUnhandledExceptionHook? {
@ExperimentalNativeApi @ExperimentalNativeApi
@SinceKotlin("1.6") @SinceKotlin("1.6")
@GCUnsafeCall("Kotlin_processUnhandledException") @GCUnsafeCall("Kotlin_processUnhandledException")
@Escapes(0b01) // throwable may be passed to the user code via unhandled exception hook.
public external fun processUnhandledException(throwable: Throwable): Unit public external fun processUnhandledException(throwable: Throwable): Unit
/* /*
@@ -91,6 +88,7 @@ public external fun processUnhandledException(throwable: Throwable): Unit
@ExperimentalNativeApi @ExperimentalNativeApi
@SinceKotlin("1.6") @SinceKotlin("1.6")
@GCUnsafeCall("Kotlin_terminateWithUnhandledException") @GCUnsafeCall("Kotlin_terminateWithUnhandledException")
// No need to mark throwable as @Escapes because this function never returns.
public external fun terminateWithUnhandledException(throwable: Throwable): Nothing public external fun terminateWithUnhandledException(throwable: Throwable): Nothing
/** /**
@@ -6,14 +6,11 @@
package kotlin.native.concurrent package kotlin.native.concurrent
import kotlin.experimental.ExperimentalNativeApi import kotlin.experimental.ExperimentalNativeApi
import kotlin.native.internal.DescribeObjectForDebugging
import kotlin.native.internal.ExportForCppRuntime
import kotlin.native.internal.GCUnsafeCall
import kotlin.native.internal.InternalForKotlinNative
import kotlin.native.internal.debugDescription
import kotlin.native.identityHashCode import kotlin.native.identityHashCode
import kotlin.reflect.KClass import kotlinx.cinterop.CPointer
import kotlinx.cinterop.* import kotlinx.cinterop.CFunction
import kotlinx.cinterop.ExperimentalForeignApi
import kotlin.native.internal.*
@GCUnsafeCall("Kotlin_Any_isShareable") @GCUnsafeCall("Kotlin_Any_isShareable")
@FreezingIsDeprecated @FreezingIsDeprecated
@@ -38,7 +35,7 @@ external internal fun waitForAnyFuture(versionToken: Int, millis: Int): Boolean
@ObsoleteWorkersApi @ObsoleteWorkersApi
external internal fun versionToken(): Int external internal fun versionToken(): Int
@kotlin.native.internal.ExportForCompiler @ExportForCompiler
@ObsoleteWorkersApi @ObsoleteWorkersApi
internal fun executeImpl(worker: Worker, mode: TransferMode, producer: () -> Any?, internal fun executeImpl(worker: Worker, mode: TransferMode, producer: () -> Any?,
job: CPointer<CFunction<*>>): Future<Any?> = job: CPointer<CFunction<*>>): Future<Any?> =
@@ -46,6 +43,7 @@ internal fun executeImpl(worker: Worker, mode: TransferMode, producer: () -> Any
@GCUnsafeCall("Kotlin_Worker_startInternal") @GCUnsafeCall("Kotlin_Worker_startInternal")
@ObsoleteWorkersApi @ObsoleteWorkersApi
@Escapes(0b10) // name is stored in the Worker instance.
external internal fun startInternal(errorReporting: Boolean, name: String?): Int external internal fun startInternal(errorReporting: Boolean, name: String?): Int
@GCUnsafeCall("Kotlin_Worker_currentInternal") @GCUnsafeCall("Kotlin_Worker_currentInternal")
@@ -63,6 +61,7 @@ external internal fun executeInternal(
@GCUnsafeCall("Kotlin_Worker_executeAfterInternal") @GCUnsafeCall("Kotlin_Worker_executeAfterInternal")
@ObsoleteWorkersApi @ObsoleteWorkersApi
@Escapes(0b10) // operation escapes into stable ref.
external internal fun executeAfterInternal(id: Int, operation: () -> Unit, afterMicroseconds: Long): Unit external internal fun executeAfterInternal(id: Int, operation: () -> Unit, afterMicroseconds: Long): Unit
@GCUnsafeCall("Kotlin_Worker_processQueueInternal") @GCUnsafeCall("Kotlin_Worker_processQueueInternal")
@@ -11,6 +11,7 @@ import kotlinx.cinterop.ExperimentalForeignApi
@GCUnsafeCall("Kotlin_WorkerBoundReference_create") @GCUnsafeCall("Kotlin_WorkerBoundReference_create")
@ObsoleteWorkersApi @ObsoleteWorkersApi
@Escapes(0b01) // value escapes into stable ref.
external private fun createWorkerBoundReference(value: Any): NativePtr external private fun createWorkerBoundReference(value: Any): NativePtr
@GCUnsafeCall("Kotlin_WorkerBoundReference_deref") @GCUnsafeCall("Kotlin_WorkerBoundReference_deref")
@@ -281,6 +281,7 @@ public class ObjCErrorException(
@PublishedApi @PublishedApi
@GCUnsafeCall("Kotlin_ObjCExport_trapOnUndeclaredException") @GCUnsafeCall("Kotlin_ObjCExport_trapOnUndeclaredException")
@ExportForCppRuntime @ExportForCppRuntime
// No need to mark throwable as @Escapes because this function actually never returns.
internal external fun trapOnUndeclaredException(exception: Throwable) internal external fun trapOnUndeclaredException(exception: Throwable)
@ExportForCppRuntime @ExportForCppRuntime
@@ -122,5 +122,6 @@ private class CleanerImpl(
@GCUnsafeCall("CreateStablePointer") @GCUnsafeCall("CreateStablePointer")
@Escapes(0b01) // obj escapes into stable ref.
external private fun createStablePointer(obj: Any): NativePtr external private fun createStablePointer(obj: Any): NativePtr