Use fromException instead of cast when matching exceptions
authorSimon Marlow <marlowsd@gmail.com>
Thu, 7 Feb 2013 09:00:22 +0000 (09:00 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 14 Feb 2013 10:06:53 +0000 (10:06 +0000)
Since I added the SomeAsyncException class, we weren't calling the
StackOverflowHook() properly for stack overflows, because this bit of
code was not expecting the extra layer in the hierarchy.

GHC/TopHandler.lhs

index f1b0cbf..160b8d1 100644 (file)
@@ -148,22 +148,22 @@ topHandlerFastExit err =
 --  another error, etc.)
 --
 real_handler :: (Int -> IO a) -> SomeException -> IO a
-real_handler exit se@(SomeException exn) = do
+real_handler exit se = do
   flushStdHandles -- before any error output
-  case cast exn of
+  case fromException se of
       Just StackOverflow -> do
            reportStackOverflow
            exit 2
 
       Just UserInterrupt  -> exitInterrupted
 
-      _ -> case cast exn of
+      _ -> case fromException se of
            -- only the main thread gets ExitException exceptions
            Just ExitSuccess     -> exit 0
            Just (ExitFailure n) -> exit n
 
            -- EPIPE errors received for stdout are ignored (#2699)
-           _ -> case cast exn of
+           _ -> case fromException se of
                 Just IOError{ ioe_type = ResourceVanished,
                               ioe_errno = Just ioe,
                               ioe_handle = Just hdl }