{-# LINE 1 "Foreign/LibFFI/Internal.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}
{- | The internals of the C library libffi -}
module Foreign.LibFFI.Internal where



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

data CValue
data CType
data CIF

type C_ffi_status   = (Word32)
{-# LINE 18 "Foreign/LibFFI/Internal.hsc" #-}
type C_ffi_abi      = (Word32)
{-# LINE 19 "Foreign/LibFFI/Internal.hsc" #-}

ffi_default_abi :: C_ffi_abi
ffi_default_abi :: C_ffi_status
ffi_default_abi = C_ffi_status
1
{-# LINE 22 "Foreign/LibFFI/Internal.hsc" #-}

ffi_ok          :: C_ffi_status
ffi_ok :: C_ffi_status
ffi_ok          = C_ffi_status
0
{-# LINE 25 "Foreign/LibFFI/Internal.hsc" #-}

sizeOf_cif :: Int
sizeOf_cif :: Int
sizeOf_cif = (Int
24)
{-# LINE 28 "Foreign/LibFFI/Internal.hsc" #-}

sizeOf_ffi_type :: Int
sizeOf_ffi_type :: Int
sizeOf_ffi_type = (Int
12)
{-# LINE 31 "Foreign/LibFFI/Internal.hsc" #-}

init_ffi_type   :: Ptr CType -> Ptr (Ptr CType) -> IO ()
init_ffi_type :: Ptr CType -> Ptr (Ptr CType) -> IO ()
init_ffi_type Ptr CType
cType Ptr (Ptr CType)
cTypes = do
    ((\Ptr CType
hsc_ptr -> Ptr CType -> Int -> CSize -> IO ()
forall b. Ptr b -> Int -> CSize -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CType
hsc_ptr Int
0)) Ptr CType
cType (CSize
0 :: CSize)
{-# LINE 35 "Foreign/LibFFI/Internal.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 4)) cType (0 :: CUShort)
{-# LINE 36 "Foreign/LibFFI/Internal.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 6)) cType ((13) :: CUShort)
{-# LINE 37 "Foreign/LibFFI/Internal.hsc" #-}
    ((\hsc_ptr -> pokeByteOff hsc_ptr 8)) cType cTypes
{-# LINE 38 "Foreign/LibFFI/Internal.hsc" #-}

ffi_type_size_and_alignment :: Ptr CType -> IO (CSize, CUShort)
ffi_type_size_and_alignment :: Ptr CType -> IO (CSize, CUShort)
ffi_type_size_and_alignment Ptr CType
cType = do
  CSize
size <- ((\Ptr CType
hsc_ptr -> Ptr CType -> Int -> IO CSize
forall b. Ptr b -> Int -> IO CSize
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CType
hsc_ptr Int
0)) Ptr CType
cType
{-# LINE 42 "Foreign/LibFFI/Internal.hsc" #-}
  alignment <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) cType
{-# LINE 43 "Foreign/LibFFI/Internal.hsc" #-}
  return (size, alignment)

foreign import ccall safe ffi_prep_cif
    :: Ptr CIF -> C_ffi_abi -> CUInt -> Ptr CType -> Ptr (Ptr CType) -> IO C_ffi_status

foreign import ccall safe ffi_call
    :: Ptr CIF -> FunPtr a -> Ptr CValue -> Ptr (Ptr CValue) -> IO ()