-{-# OPTIONS -W -fno-warn-incomplete-patterns #-}
+{-# OPTIONS -fno-warn-incomplete-patterns #-}
-----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.32 2000/11/22 17:51:16 simonmar Exp $
+-- $Id: Main.hs,v 1.41 2000/12/20 10:33:25 simonmar Exp $
--
-- GHC Driver program
--
#include "HsVersions.h"
-import CompManager
-import Interpreter
+
#ifdef GHCI
+import Interpreter
import InteractiveUI
#endif
+
+#ifndef mingw32_TARGET_OS
+import Dynamic
+import Posix
+#endif
+
+import CompManager
import DriverPipeline
import DriverState
import DriverFlags
import Panic
import DriverPhases ( Phase(..) )
import CmdLineOpts ( HscLang(..), DynFlags(..), v_Static_hsc_opts )
-import Module ( mkModuleName )
import TmpFiles
import Finder ( initFinder )
import CmStaticInfo
import Config
import Util
+
+
import Concurrent
-#ifndef mingw32_TARGET_OS
-import Posix
-#endif
import Directory
import IOExts
import Exception
-import Dynamic
import IO
import Monad
-- No more "Enter your Haskell program, end with ^D (on a line of its own):"
-- consistency checking removed (may do this properly later)
-- removed -noC
--- no hi diffs (could be added later)
-- no -Ofile
-----------------------------------------------------------------------------
-- Main loop
main =
+ -- top-level exception handler: any unrecognised exception is a compiler bug.
+ handle (\exception -> do hPutStr stderr (show (Panic (show exception)))
+ exitWith (ExitFailure 1)
+ ) $ do
+
-- all error messages are propagated as exceptions
handleDyn (\dyn -> case dyn of
PhaseFailed _phase code -> exitWith code
Interrupted -> exitWith (ExitFailure 1)
- _ -> do hPutStrLn stderr (show (dyn :: BarfKind))
+ _ -> do hPutStrLn stderr (show (dyn :: GhcException))
exitWith (ExitFailure 1)
- ) $ do
+ ) $ do
-- make sure we clean up after ourselves
later (do forget_it <- readIORef v_Keep_tmp_files
#else
beginInteractive mods
= do state <- cmInit Interactive
- (state', ok, ms)
- <- case mods of
- [] -> return (state, True, [])
- [mod] -> cmLoadModule state mod
+ let mod = case mods of
+ [] -> Nothing
+ [mod] -> Just mod
_ -> throwDyn (UsageError
"only one module allowed with --interactive")
- interactiveUI state' ms
+ interactiveUI state mod
#endif