[K/N] Mark Platform-related API with ExperimentalNativeApi

As part of stabilizing Native stdlib.
This commit is contained in:
Abduqodiri Qurbonzoda
2023-03-22 17:07:13 +02:00
committed by Space Team
parent f04d01cf21
commit ad5593e68a
3 changed files with 8 additions and 1 deletions
@@ -4,6 +4,7 @@
*/ */
package kotlin.native package kotlin.native
import kotlin.experimental.ExperimentalNativeApi
import kotlin.native.internal.GCUnsafeCall import kotlin.native.internal.GCUnsafeCall
import kotlin.native.internal.TypedIntrinsic import kotlin.native.internal.TypedIntrinsic
import kotlin.native.internal.IntrinsicType import kotlin.native.internal.IntrinsicType
@@ -11,6 +12,7 @@ import kotlin.native.internal.IntrinsicType
/** /**
* Operating system family. * Operating system family.
*/ */
@ExperimentalNativeApi
public enum class OsFamily { public enum class OsFamily {
UNKNOWN, UNKNOWN,
MACOSX, MACOSX,
@@ -26,6 +28,7 @@ public enum class OsFamily {
/** /**
* Central Processor Unit architecture. * Central Processor Unit architecture.
*/ */
@ExperimentalNativeApi
public enum class CpuArchitecture(val bitness: Int) { public enum class CpuArchitecture(val bitness: Int) {
UNKNOWN(-1), UNKNOWN(-1),
ARM32(32), ARM32(32),
@@ -41,6 +44,7 @@ public enum class CpuArchitecture(val bitness: Int) {
* Memory model. * Memory model.
*/ */
// NOTE: Must match `MemoryModel` in `Memory.h` // NOTE: Must match `MemoryModel` in `Memory.h`
@ExperimentalNativeApi
public enum class MemoryModel { public enum class MemoryModel {
STRICT, STRICT,
RELAXED, RELAXED,
@@ -50,6 +54,7 @@ public enum class MemoryModel {
/** /**
* Object describing the current platform program executes upon. * Object describing the current platform program executes upon.
*/ */
@ExperimentalNativeApi
public object Platform { public object Platform {
/** /**
* Check if current architecture allows unaligned access to wider than byte locations. * Check if current architecture allows unaligned access to wider than byte locations.
@@ -125,7 +130,6 @@ public object Platform {
* `KOTLIN_NATIVE_AVAILABLE_PROCESSORS` environment variable. When the variable is set and contains a value that is not * `KOTLIN_NATIVE_AVAILABLE_PROCESSORS` environment variable. When the variable is set and contains a value that is not
* positive [Int], [IllegalStateException] will be thrown. * positive [Int], [IllegalStateException] will be thrown.
*/ */
@ExperimentalStdlibApi
public fun getAvailableProcessors() : Int { public fun getAvailableProcessors() : Int {
val fromEnv = Platform_getAvailableProcessorsEnv() val fromEnv = Platform_getAvailableProcessorsEnv()
if (fromEnv == null) { if (fromEnv == null) {
@@ -33,6 +33,7 @@ public class MutableData constructor(capacity: Int = 16) {
private var buffer_ = ByteArray(capacity).apply { share() } private var buffer_ = ByteArray(capacity).apply { share() }
private var buffer: ByteArray private var buffer: ByteArray
@OptIn(ExperimentalNativeApi::class)
get() = get() =
when (kotlin.native.Platform.memoryModel) { when (kotlin.native.Platform.memoryModel) {
kotlin.native.MemoryModel.EXPERIMENTAL -> buffer_ kotlin.native.MemoryModel.EXPERIMENTAL -> buffer_
@@ -5,6 +5,7 @@
package kotlin.native.concurrent package kotlin.native.concurrent
import kotlin.experimental.ExperimentalNativeApi
import kotlin.native.internal.ExportForCppRuntime import kotlin.native.internal.ExportForCppRuntime
import kotlin.native.internal.Frozen import kotlin.native.internal.Frozen
import kotlin.native.internal.VolatileLambda import kotlin.native.internal.VolatileLambda
@@ -137,6 +138,7 @@ public value class Worker @PublishedApi internal constructor(val id: Int) {
* @throws [IllegalArgumentException] on negative values of [afterMicroseconds]. * @throws [IllegalArgumentException] on negative values of [afterMicroseconds].
* @throws [IllegalStateException] if [operation] parameter is not frozen and worker is not current. * @throws [IllegalStateException] if [operation] parameter is not frozen and worker is not current.
*/ */
@OptIn(ExperimentalNativeApi::class)
public fun executeAfter(afterMicroseconds: Long = 0, operation: () -> Unit): Unit { public fun executeAfter(afterMicroseconds: Long = 0, operation: () -> Unit): Unit {
val current = currentInternal() val current = currentInternal()
if (Platform.memoryModel != MemoryModel.EXPERIMENTAL && current != id && !operation.isFrozen) throw IllegalStateException("Job for another worker must be frozen") if (Platform.memoryModel != MemoryModel.EXPERIMENTAL && current != id && !operation.isFrozen) throw IllegalStateException("Job for another worker must be frozen")