packages feed

cinvoke-0.1: Foreign/CInvoke/Internal.hsc

{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}
{- | The internals of the C library cinvoke.
    Mail the maintainer if you think you need this module. -}
module Foreign.CInvoke.Internal where

#include <cinvoke.h>
#include <cinvoke-arch.h>

import Data.Int
import Data.Word
import Foreign.C.Types
import Foreign.C.String
import Foreign.Ptr
import Foreign.Storable

data CValue
data CContext
data CLibrary
data CSymbol

type C_int32 = (#type cinv_int32_t)
type C_status = (#type cinv_status_t)
type C_callconv = (#type cinv_callconv_t)

default_callconv :: C_callconv
default_callconv = #const CINV_CC_DEFAULT

success_status :: C_status
success_status = #const CINV_SUCCESS

error_status :: C_status
error_status = #const CINV_ERROR

foreign import ccall safe cinv_context_create           :: IO (Ptr CContext)
foreign import ccall safe cinv_context_geterrormsg      :: Ptr CContext -> IO CString
foreign import ccall safe cinv_context_geterrorcode     :: Ptr CContext -> IO C_int32
foreign import ccall safe cinv_context_delete           :: Ptr CContext -> IO C_status
foreign import ccall safe cinv_library_create           :: Ptr CContext -> CString -> IO (Ptr CLibrary)
foreign import ccall safe cinv_library_load_entrypoint  :: Ptr CContext -> Ptr CLibrary -> CString -> IO (Ptr ())
foreign import ccall safe cinv_library_delete           :: Ptr CContext -> Ptr CLibrary -> IO C_status
foreign import ccall safe cinv_function_create          :: Ptr CContext -> C_callconv -> CString -> CString -> IO (Ptr CSymbol)
foreign import ccall safe cinv_function_invoke          :: Ptr CContext -> Ptr CSymbol -> FunPtr a -> Ptr CValue -> Ptr (Ptr CValue) -> IO C_status
foreign import ccall safe cinv_function_delete          :: Ptr CContext -> Ptr CSymbol -> IO C_status