installSignalHandlers, interruptTargetThread
) where
+-- XXX This define is a bit of a hack, and should be done more nicely
+#define FAST_STRING_NOT_NEEDED 1
#include "HsVersions.h"
import Config
import FastTypes
#ifndef mingw32_HOST_OS
-# if __GLASGOW_HASKELL__ > 504
import System.Posix.Signals
-# else
-import Posix ( Handler(Catch), installHandler, sigINT, sigQUIT )
-# endif /* GHC > 504 */
#endif /* mingw32_HOST_OS */
#if defined(mingw32_HOST_OS) && __GLASGOW_HASKELL__ >= 603
| ProgramError String -- error in the user's code, probably
deriving Eq
+progName :: String
progName = unsafePerformIO (getProgName)
{-# NOINLINE progName #-}
+short_usage :: String
short_usage = "Usage: For basic information, try the `--help' option."
showException :: Exception.Exception -> String
showsPrec _ e@(ProgramError _) = showGhcException e
showsPrec _ e = showString progName . showString ": " . showGhcException e
+showGhcException :: GhcException -> String -> String
showGhcException (UsageError str)
= showString str . showChar '\n' . showString short_usage
showGhcException (PhaseFailed phase code)
++ s ++ "\n\n"
++ "Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n")
+myMkTyConApp :: TyCon -> [TypeRep] -> TypeRep
#if __GLASGOW_HASKELL__ < 603
myMkTyConApp = mkAppTy
#else
myMkTyConApp = mkTyConApp
#endif
+ghcExceptionTc :: TyCon
ghcExceptionTc = mkTyCon "GhcException"
{-# NOINLINE ghcExceptionTc #-}
instance Typeable GhcException where
tryUser :: IO a -> IO (Either Exception.Exception a)
tryUser action = tryJust tc_errors action
where
-#if __GLASGOW_HASKELL__ > 504
tc_errors e@(Exception.IOException ioe) | isUserError ioe = Just e
-#else
- tc_errors e@(Exception.IOException ioe) | isUserError e = Just e
-#endif
tc_errors _other = Nothing
\end{code}