{-# LINE 1 "LLVM/FFI/Linker.hsc" #-}
{-# LANGUAGE CPP, ForeignFunctionInterface #-}
{-# LINE 2 "LLVM/FFI/Linker.hsc" #-}

module LLVM.FFI.Linker where
import LLVM.FFI.Core
import Foreign.C.String(CString)
import Foreign.C.Types(CUInt(..))
import Foreign.Ptr(Ptr)


{-# LINE 10 "LLVM/FFI/Linker.hsc" #-}

data LinkerMode = DestroySource | PreserveSource
                  deriving (Show, Eq)

fromLinkerMode :: LinkerMode -> CUInt
fromLinkerMode DestroySource = (0)
{-# LINE 16 "LLVM/FFI/Linker.hsc" #-}
fromLinkerMode PreserveSource = (0)
{-# LINE 17 "LLVM/FFI/Linker.hsc" #-}

toLinkerMode :: CUInt -> LinkerMode
toLinkerMode c | c == (0) = DestroySource
{-# LINE 20 "LLVM/FFI/Linker.hsc" #-}
toLinkerMode c | c == (1) = PreserveSource
{-# LINE 21 "LLVM/FFI/Linker.hsc" #-}
toLinkerMode c = error $ "LLVM.FFI.Linker.toLinkerMode: unrecognized linker mode" ++ show c

foreign import ccall unsafe "LLVMLinkModules" linkModules
    :: ModuleRef -> ModuleRef -> CUInt -> Ptr CString -> IO Bool