{-# LANGUAGE EmptyDataDecls #-} module LLVM.DSL.Dump (writer) where import qualified LLVM.DSL.Debug.Counter as Counter import qualified LLVM.Core as LLVM import qualified Data.IORef as IORef import System.IO.Unsafe (unsafePerformIO) data BitCodeCnt {- | This is only for debugging purposes and thus I felt free to use unsafePerformIO. -} counter :: IORef.IORef (Counter.T BitCodeCnt) counter = unsafePerformIO Counter.new bitcodeToFile :: String -> Counter.T ident -> String -> LLVM.Module -> IO () bitcodeToFile name cnt ext = LLVM.writeBitcodeToFile ("llvm" ++ Counter.format 3 cnt ++ name ++ ext ++ ".bc") writer :: String -> IO (String -> LLVM.Module -> IO ()) writer name = fmap (bitcodeToFile name) $ Counter.next counter