codegen: handle exceptions of a method
[mate.git] / Mate / Debug.hs
index 8c1ca63b6b0293a06845f3d307a1fdefa30b7e63..ba7ce315722e82be962d7d1543ff14780f328509 100644 (file)
@@ -1,47 +1,45 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
-#include "debug.h"
 
-module Mate.Debug where
-
-{- we cannot use `PrintfType' from Text.Printf, as it isn't exported.
- - so we implement a `VarArgsFake' here.
- - http://www.haskell.org/haskellwiki/Varargs -}
-class VarArgsFake t where
-  varFake :: [String] -> t
-
-instance VarArgsFake (IO a) where
-  varFake _ = return undefined
-
-instance (Show a, VarArgsFake r) => VarArgsFake (a -> r) where
-  varFake _ _ = varFake []
-
-printfFake :: String -> (VarArgsFake t) => t
-printfFake _ = varFake []
-
-
--- see counterpart at `debug.h'
-#ifndef DBG_JIT
-printfJit :: String -> (VarArgsFake t) => t
-printfJit = printfFake
-#endif
-
-#ifndef DBG_BB
-printfBb :: String -> (VarArgsFake t) => t
-printfBb = printfFake
-#endif
-
-#ifndef DBG_MP
-printfMp :: String -> (VarArgsFake t) => t
-printfMp = printfFake
-#endif
-
-#ifndef DBG_CP
-printfCp :: String -> (VarArgsFake t) => t
-printfCp = printfFake
-#endif
-
-#ifndef DBG_STR
-printfStr :: String -> (VarArgsFake t) => t
-printfStr = printfFake
-#endif
+module Mate.Debug
+  ( printfJit
+  , printfBb
+  , printfMp
+  , printfCp
+  , printfStr
+  , printfInfo
+  , mateDEBUG
+  , printf -- TODO: delete me
+  ) where
+
+import Text.Printf
+import System.IO
+import System.IO.Unsafe
+import Control.Monad
+
+
+{-# NOINLINE logHandle #-}
+-- TODO(bernhard): use MVar if threaded
+logHandle :: Handle
+logHandle = unsafePerformIO $ openFile "mate.log" WriteMode
+
+{-# INLINE mateDEBUG #-}
+mateDEBUG :: Bool
+mateDEBUG = False
+
+{-# INLINE printString #-}
+printString :: String -> String -> IO ()
+printString prefix str = do
+  when mateDEBUG $ hPutStr logHandle . (++) prefix $ str
+  hFlush logHandle
+
+printfJit, printfBb, printfMp, printfCp, printfStr, printfInfo  :: String -> IO ()
+{-
+-- TODO(bernhard):
+-- http://stackoverflow.com/questions/12123082/function-composition-with-text-printf-printf
+-}
+printfJit  = printString "Jit: "
+printfBb   = printString "Bb: "
+printfMp   = printString "Mp: "
+printfCp   = printString "Cp: "
+printfStr  = printString "Str: "
+printfInfo = printString "Info: "