/* * Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the LICENSE file. */ @file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class) import kotlin.test.* import kotlinx.cinterop.* typealias heap_t = IntVar fun heap_create(size: Long): CPointer? = null fun heap_alloc(heap: CPointer?, size: ULong): CPointer<*>? = null fun heap_free(heap: CPointer?, ptr: CPointer<*>?): CPointer? = null inline fun Heap(size: Long): CPointer? { return heap_create(size) } inline fun CPointer?.use(f: (CPointer) -> Unit) { alloc() ?.also(f) ?.also(::free) } inline fun CPointer?.alloc(): CPointer? { return heap_alloc(this, sizeOf().toULong())?.reinterpret() } inline fun CPointer?.free(ptr: CPointer<*>?): Boolean { return heap_free(this, ptr)?.pointed?.value ?: false } fun box(): String { memScoped { val heap = Heap(1024) heap.use { ptr -> ptr.pointed.value = 40 //println("PTR ${ptr.pointed}") } } return "OK" }