projects
/
ghc-base.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ecf3d15
)
commit mysteriously missing parts of "runIOFastExit" patch
author
Simon Marlow
<simonmar@microsoft.com>
Tue, 21 Mar 2006 10:15:35 +0000
(10:15 +0000)
committer
Simon Marlow
<simonmar@microsoft.com>
Tue, 21 Mar 2006 10:15:35 +0000
(10:15 +0000)
GHC/TopHandler.lhs
patch
|
blob
|
history
diff --git
a/GHC/TopHandler.lhs
b/GHC/TopHandler.lhs
index
4785f61
..
686b027
100644
(file)
--- a/
GHC/TopHandler.lhs
+++ b/
GHC/TopHandler.lhs
@@
-68,27
+68,31
@@
runNonIO :: a -> IO a
runNonIO a = catchException (a `seq` return a) topHandler
topHandler :: Exception -> IO a
runNonIO a = catchException (a `seq` return a) topHandler
topHandler :: Exception -> IO a
-topHandler err = catchException (real_handler err) topHandler
+topHandler err = catchException (real_handler safeExit err) topHandler
+
+topHandlerFastExit :: Exception -> IO a
+topHandlerFastExit err =
+ catchException (real_handler fastExit err) topHandlerFastExit
-- Make sure we handle errors while reporting the error!
-- (e.g. evaluating the string passed to 'error' might generate
-- another error, etc.)
--
-- Make sure we handle errors while reporting the error!
-- (e.g. evaluating the string passed to 'error' might generate
-- another error, etc.)
--
-real_handler :: Exception -> IO a
-real_handler ex =
+real_handler :: (Int -> IO a) -> Exception -> IO a
+real_handler exit exn =
cleanUp >>
cleanUp >>
- case ex of
+ case exn of
AsyncException StackOverflow -> do
reportStackOverflow
AsyncException StackOverflow -> do
reportStackOverflow
- safeExit 2
+ exit 2
-- only the main thread gets ExitException exceptions
-- only the main thread gets ExitException exceptions
- ExitException ExitSuccess -> safeExit 0
- ExitException (ExitFailure n) -> safeExit n
+ ExitException ExitSuccess -> exit 0
+ ExitException (ExitFailure n) -> exit n
other -> do
reportError other
other -> do
reportError other
- safeExit 1
+ exit 1
reportStackOverflow :: IO a
reportStackOverflow :: IO a
@@
-125,4
+129,10
@@
safeExit r = unsafeCoerce# (shutdownHaskellAndExit r)
-- re-enter Haskell land through finalizers.
foreign import ccall "shutdownHaskellAndExit"
shutdownHaskellAndExit :: Int -> IO ()
-- re-enter Haskell land through finalizers.
foreign import ccall "shutdownHaskellAndExit"
shutdownHaskellAndExit :: Int -> IO ()
+
+fastExit :: Int -> IO a
+fastExit r = unsafeCoerce# (stg_exit (fromIntegral r))
+
+foreign import ccall "stg_exit"
+ stg_exit :: CInt -> IO ()
\end{code}
\end{code}