X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fghci%2FInteractiveUI.hs;h=ec59f0b4e179a3189bae67266423c3efdd84c47e;hb=153b9cb9b11e05c4edb1b6bc0a7b972660e41f70;hp=719714e3daec4c3045d982e891497b73a6d6f6e8;hpb=ef5b4b146aa172d8ac10f39b5eb3d7a0f948d8f1;p=ghc-hetmet.git diff --git a/ghc/compiler/ghci/InteractiveUI.hs b/ghc/compiler/ghci/InteractiveUI.hs index 719714e..ec59f0b 100644 --- a/ghc/compiler/ghci/InteractiveUI.hs +++ b/ghc/compiler/ghci/InteractiveUI.hs @@ -1,6 +1,6 @@ {-# OPTIONS -#include "Linker.h" #-} ----------------------------------------------------------------------------- --- $Id: InteractiveUI.hs,v 1.180 2004/11/26 16:20:36 simonmar Exp $ +-- $Id: InteractiveUI.hs,v 1.185 2005/01/28 12:55:23 simonmar Exp $ -- -- GHC Interactive User Interface -- @@ -12,7 +12,6 @@ module InteractiveUI ( ghciWelcomeMsg ) where -#include "../includes/ghcconfig.h" #include "HsVersions.h" import CompManager @@ -26,7 +25,6 @@ import DriverState import DriverUtil ( remove_spaces ) import Linker ( showLinkerState, linkPackages ) import Util -import Module ( showModMsg, lookupModuleEnv ) import Name ( Name, NamedThing(..) ) import OccName ( OccName, isSymOcc, occNameUserString ) import BasicTypes ( StrictnessMark(..), defaultFixity, SuccessFlag(..) ) @@ -62,12 +60,14 @@ import System.Cmd import System.CPUTime import System.Environment import System.Directory -import System.IO as IO +import System.IO +import System.IO.Error as IO import Data.Char import Control.Monad as Monad import Foreign.StablePtr ( newStablePtr ) import GHC.Exts ( unsafeCoerce# ) +import GHC.IOBase ( IOErrorType(InvalidArgument) ) import Data.IORef ( IORef, newIORef, readIORef, writeIORef ) @@ -308,8 +308,14 @@ fileLoop hdl prompt = do when prompt (io (putStr (mkPrompt mod imports))) l <- io (IO.try (hGetLine hdl)) case l of - Left e | isEOFError e -> return () - | otherwise -> io (ioError e) + Left e | isEOFError e -> return () + | InvalidArgument <- etype -> return () + | otherwise -> io (ioError e) + where etype = ioeGetErrorType e + -- treat InvalidArgument in the same way as EOF: + -- this can happen if the user closed stdin, or + -- perhaps did getContents which closes stdin at + -- EOF. Right l -> case remove_spaces l of "" -> fileLoop hdl prompt @@ -971,22 +977,10 @@ showCmd str = ["linker"] -> io showLinkerState _ -> throwDyn (CmdLineError "syntax: :show [modules|bindings]") -showModules = do - cms <- getCmState - let (mg, hpt) = cmGetModInfo cms - mapM_ (showModule hpt) mg - - -showModule :: HomePackageTable -> ModSummary -> GHCi () -showModule hpt mod_summary - = case lookupModuleEnv hpt mod of - Nothing -> panic "missing linkable" - Just mod_info -> io (putStrLn (showModMsg obj_linkable mod locn)) - where - obj_linkable = isObjectLinkable (hm_linkable mod_info) - where - mod = ms_mod mod_summary - locn = ms_location mod_summary +showModules + = do { cms <- getCmState + ; let show_one ms = io (putStrLn (cmShowModule cms ms)) + ; mapM_ show_one (cmGetModuleGraph cms) } showBindings = do cms <- getCmState