llvm-base-3.2.0.1: LLVM/Wrapper/Target.hs
module LLVM.Wrapper.Target
( module LLVM.FFI.Target
, TargetData
, ByteOrdering(..)
, byteOrder
, copyStringRepOfTargetData
, createTargetData
, withTargetData
) where
import LLVM.FFI.Target
( addTargetData
, disposeTargetData
, intPtrType
, callFrameAlignmentOfType
, aBIAlignmentOfType
, aBISizeOfType
, pointerSize
, preferredAlignmentOfGlobal
, preferredAlignmentOfType
, sizeOfTypeInBits
, storeSizeOfType
, elementAtOffset
, offsetOfElement
)
import qualified LLVM.FFI.Target as FFI.T
import Foreign.C.String (peekCString, withCString)
import Control.Exception (finally)
type TargetData = FFI.T.TargetDataRef
data ByteOrdering = BigEndian | LittleEndian deriving Eq
byteOrder :: TargetData -> ByteOrdering
byteOrder td = if FFI.T.byteOrder td == 0 then BigEndian else LittleEndian
copyStringRepOfTargetData :: TargetData -> IO String
copyStringRepOfTargetData td = do s <- FFI.T.copyStringRepOfTargetData td
peekCString s
createTargetData :: String -> IO TargetData
createTargetData str = withCString str $ \p -> FFI.T.createTargetData p
withTargetData :: String -> (TargetData -> IO a) -> IO a
withTargetData str f = do t <- createTargetData str
finally (f t) (FFI.T.disposeTargetData t)