libffi-dynamic-0.0.0.1: src/Foreign/LibFFI/Dynamic/Closure.hs
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Foreign.LibFFI.Dynamic.Closure where
import Foreign.C.Types
import Foreign.LibFFI.Dynamic.Base
import Foreign.LibFFI.Dynamic.CIF
import Foreign.Ptr
import Foreign.Storable
newtype Closure = Closure (Ptr Closure)
newtype Entry = Entry (FunPtr Entry) deriving (Eq, Ord, Show, Storable)
foreign import ccall "hs_ffi_closure_alloc"
ffi_closure_alloc :: CSize -> Ptr Entry -> IO Closure
foreign import ccall "hs_ffi_closure_free"
ffi_closure_free :: Closure -> IO ()
type FFI_Impl t a = CIF t -> Ptr (SigReturn t) -> Ptr (Ptr ()) -> Ptr a -> IO ()
foreign import ccall "wrapper" wrap_FFI_Impl :: FFI_Impl t a -> IO (FunPtr (FFI_Impl t a))
foreign import ccall ffi_prep_closure_loc :: Closure -> CIF t -> FunPtr (FFI_Impl t a) -> Ptr a -> Entry -> IO FFI_Status