X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Futils%2FPanic.lhs;h=300e7fcbccc3cc6f4a69716aef71bdf721de4801;hb=923ee9d360ed15331ac6faf8a6b4aca334fc0cee;hp=1a74d5db3257326630e9dea57f1ee900a9f349e8;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/utils/Panic.lhs b/compiler/utils/Panic.lhs index 1a74d5d..300e7fc 100644 --- a/compiler/utils/Panic.lhs +++ b/compiler/utils/Panic.lhs @@ -1,7 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP Project, Glasgow University, 1992-2000 % -\section{Panic error messages} Defines basic funtions for printing error messages. @@ -39,24 +39,15 @@ import Posix ( Handler(Catch), installHandler, sigINT, sigQUIT ) import GHC.ConsoleHandler #endif -# if __GLASGOW_HASKELL__ < 500 -import EXCEPTION ( raiseInThread ) -# else -import EXCEPTION ( throwTo ) -# endif /* GHC < 500 */ - -#if __GLASGOW_HASKELL__ > 408 -import EXCEPTION ( catchJust, tryJust, ioErrors ) -#endif - -import CONCURRENT ( myThreadId, MVar, ThreadId, withMVar, newEmptyMVar ) -import DYNAMIC -import qualified EXCEPTION as Exception -import TRACE ( trace ) -import UNSAFE_IO ( unsafePerformIO ) -import IO ( isUserError ) - -import System +import Control.Exception +import Control.Concurrent ( MVar, ThreadId, withMVar, newMVar ) +import Data.Dynamic +import qualified Control.Exception as Exception +import Debug.Trace ( trace ) +import System.IO.Unsafe ( unsafePerformIO ) +import System.IO.Error ( isUserError ) +import System.Exit +import System.Environment \end{code} GHC's own exception type. @@ -180,33 +171,14 @@ tryMost action = do r <- try action; filter r tryUser :: IO a -> IO (Either Exception.Exception a) tryUser action = tryJust tc_errors action where -#if __GLASGOW_HASKELL__ > 504 || __GLASGOW_HASKELL__ < 500 +#if __GLASGOW_HASKELL__ > 504 tc_errors e@(Exception.IOException ioe) | isUserError ioe = Just e -#elif __GLASGOW_HASKELL__ == 502 - tc_errors e@(UserError _) = Just e #else tc_errors e@(Exception.IOException ioe) | isUserError e = Just e #endif tc_errors _other = Nothing \end{code} -Compatibility stuff: - -\begin{code} -#if __GLASGOW_HASKELL__ <= 408 -try = Exception.tryAllIO -#else -try = Exception.try -#endif - -#if __GLASGOW_HASKELL__ <= 408 -catchJust = Exception.catchIO -tryJust = Exception.tryIO -ioErrors = Exception.justIoErrors -throwTo = Exception.raiseInThread -#endif -\end{code} - Standard signal handlers for catching ^C, which just throw an exception in the target thread. The current target thread is the thread at the head of the list in the MVar passed to @@ -246,5 +218,5 @@ installSignalHandlers = do {-# NOINLINE interruptTargetThread #-} interruptTargetThread :: MVar [ThreadId] -interruptTargetThread = unsafePerformIO newEmptyMVar +interruptTargetThread = unsafePerformIO (newMVar []) \end{code}