X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FPanic.lhs;h=6251d1baf414bc81b0ca6bc8af5f478b10a1de88;hb=153b9cb9b11e05c4edb1b6bc0a7b972660e41f70;hp=ed6d7963a65d388a142f9d2353139019a0db3d43;hpb=cfd7a0d5daf0c2e2bc6526e941c1e0817432f3b5;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/Panic.lhs b/ghc/compiler/utils/Panic.lhs index ed6d796..6251d1b 100644 --- a/ghc/compiler/utils/Panic.lhs +++ b/ghc/compiler/utils/Panic.lhs @@ -12,15 +12,15 @@ some unnecessary loops in the module dependency graph. module Panic ( GhcException(..), ghcError, progName, + pgmError, panic, panic#, assertPanic, trace, showException, showGhcException, tryMost, - installSignalHandlers, + installSignalHandlers, catchJust, tryJust, ioErrors, throwTo, ) where #include "HsVersions.h" -#include "config.h" import Config import FastTypes @@ -31,10 +31,12 @@ import System.Posix.Signals # else import Posix ( Handler(Catch), installHandler, sigINT, sigQUIT ) # endif /* GHC > 504 */ - -import CONCURRENT ( myThreadId ) #endif /* mingw32_HOST_OS */ +#if defined(mingw32_HOST_OS) && __GLASGOW_HASKELL__ >= 603 +import GHC.ConsoleHandler +#endif + # if __GLASGOW_HASKELL__ < 500 import EXCEPTION ( raiseInThread ) # else @@ -45,6 +47,7 @@ import EXCEPTION ( throwTo ) import EXCEPTION ( catchJust, tryJust, ioErrors ) #endif +import CONCURRENT ( myThreadId ) import DYNAMIC import qualified EXCEPTION as Exception import TRACE ( trace ) @@ -121,7 +124,7 @@ showGhcException (Panic s) ++ "to glasgow-haskell-bugs@haskell.org,\n" ++ "or http://sourceforge.net/projects/ghc/.\n\n") -#if __GLASGOW_HASKELL__ < 630 +#if __GLASGOW_HASKELL__ < 603 myMkTyConApp = mkAppTy #else myMkTyConApp = mkTyConApp @@ -136,8 +139,9 @@ instance Typeable GhcException where Panics and asserts. \begin{code} -panic :: String -> a -panic x = Exception.throwDyn (Panic x) +panic, pgmError :: String -> a +panic x = Exception.throwDyn (Panic x) +pgmError x = Exception.throwDyn (ProgramError x) -- #-versions because panic can't return an unboxed int, and that's -- what TAG_ is with GHC at the moment. Ugh. (Simon) @@ -194,12 +198,28 @@ thread. \begin{code} installSignalHandlers :: IO () installSignalHandlers = do -#ifndef mingw32_HOST_OS main_thread <- myThreadId - let sig_handler = Catch (throwTo main_thread - (Exception.DynException (toDyn Interrupted))) - installHandler sigQUIT sig_handler Nothing - installHandler sigINT sig_handler Nothing -#endif + let + interrupt_exn = Exception.DynException (toDyn Interrupted) + interrupt = throwTo main_thread interrupt_exn + -- +#if !defined(mingw32_HOST_OS) + installHandler sigQUIT (Catch interrupt) Nothing + installHandler sigINT (Catch interrupt) Nothing + return () +#elif __GLASGOW_HASKELL__ >= 603 + -- GHC 6.3+ has support for console events on Windows + -- NOTE: running GHCi under a bash shell for some reason requires + -- you to press Ctrl-Break rather than Ctrl-C to provoke + -- an interrupt. Ctrl-C is getting blocked somewhere, I don't know + -- why --SDM 17/12/2004 + let sig_handler ControlC = interrupt + sig_handler Break = interrupt + sig_handler _ = return () + + installHandler (Catch sig_handler) return () +#else + return () -- nothing +#endif \end{code}