Coverage Summary for Class: FFMKt (dev.suresh)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
FFMKt |
0%
(0/1)
|
0%
(0/8)
|
|
0%
(0/11)
|
0%
(0/73)
|
package dev.suresh
import java.lang.foreign.FunctionDescriptor
import java.lang.foreign.Linker
import java.lang.foreign.MemorySegment
import java.lang.foreign.SymbolLookup
import java.lang.invoke.MethodHandle
import kotlin.jvm.optionals.getOrNull
val LINKER: Linker = Linker.nativeLinker()
val SYMBOL_LOOKUP: SymbolLookup by lazy {
val stdlib = LINKER.defaultLookup()
val loaderLookup = SymbolLookup.loaderLookup()
SymbolLookup { name -> loaderLookup.find(name).or { stdlib.find(name) } }
}
val UNSAFE by lazy {
sun.misc.Unsafe::class.java.getDeclaredField("theUnsafe").run {
isAccessible = true
get(null) as sun.misc.Unsafe
}
}
fun SymbolLookup.findOrNull(name: String): MemorySegment? = find(name).getOrNull()
fun downcallHandle(
symbol: String,
fdesc: FunctionDescriptor,
vararg options: Linker.Option
): MethodHandle? =
SYMBOL_LOOKUP.findOrNull(symbol).let { LINKER.downcallHandle(it, fdesc, *options) }