diff --git a/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Types.kt b/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Types.kt index 1b2533eb85e..d51d41770c7 100644 --- a/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Types.kt +++ b/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Types.kt @@ -195,4 +195,8 @@ class Arena : Placement, Closeable { override fun close() = clear() +} + +fun Placement.alloc(type: NativeRef.TypeWithSize): T { + return type.byPtr(this.alloc(type.size)) } \ No newline at end of file diff --git a/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Utils.kt b/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Utils.kt index cc60ae9571f..d1de51c09cf 100644 --- a/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Utils.kt +++ b/Interop/Runtime/src/main/kotlin/kotlin_native/interop/Utils.kt @@ -19,14 +19,16 @@ fun free(ptr: NativePtr?) { fun free(ref: NativeRef?) = free(ref.getNativePtr()) -fun mallocNativeArrayOf(elemType: NativeRef.Type, vararg elements: T?): NativeArray> { - val res = malloc(array[elements.size](elemType.ref)) +fun Placement.allocNativeArrayOf(elemType: NativeRef.Type, vararg elements: T?): NativeArray> { + val res = this.alloc(array[elements.size](elemType.ref)) elements.forEachIndexed { i, element -> res[i].value = element } return res } +fun mallocNativeArrayOf(elemType: NativeRef.Type, vararg elements: T?) = heap.allocNativeArrayOf(elemType, *elements) + fun CString.Companion.fromString(str: String?): CString? { if (str == null) { return null