Coverage Summary for Class: FFMKt (dev.suresh)

Class Class, % Method, % Branch, % Line, % Instruction, %
FFMKt 0% (0/1) 0% (0/5) 0% (0/7) 0% (0/54)


 package dev.suresh
 
 import java.lang.foreign.FunctionDescriptor
 import java.lang.foreign.Linker
 import java.lang.foreign.SymbolLookup
 import java.lang.invoke.MethodHandle
 
 val LINKER: Linker = Linker.nativeLinker()
 
 /** Symbols loaded via caller's class loader (System.loadLibrary) if found, else from libc */
 val SYMBOL_LOOKUP: SymbolLookup by lazy { SymbolLookup.loaderLookup().or(LINKER.defaultLookup()) }
 
 val UNSAFE by lazy {
   sun.misc.Unsafe::class.java.getDeclaredField("theUnsafe").run {
     isAccessible = true
     get(null) as sun.misc.Unsafe
   }
 }
 
 fun downcallHandle(
     symbol: String,
     fdesc: FunctionDescriptor,
     vararg options: Linker.Option
 ): MethodHandle? =
     SYMBOL_LOOKUP.findOrThrow(symbol).let { LINKER.downcallHandle(it, fdesc, *options) }