#include "HsVersions.h"
import qualified GHC
-import Outputable
-import Panic hiding (showException)
+import Outputable hiding (printForUser)
+import qualified Outputable
+import Panic hiding (showException)
import Util
import DynFlags
import HscTypes
args :: [String],
prompt :: String,
editor :: String,
+ stop :: String,
session :: GHC.Session,
options :: [GHCiOption],
prelude :: GHC.Module,
- resume :: [(SrcSpan, ThreadId, GHC.ResumeHandle)],
+ resume :: [EvalInProgress],
breaks :: !ActiveBreakPoints,
tickarrays :: ModuleEnv TickArray
-- tickarrays caches the TickArray for loaded modules,
, breakLocations :: ![(Int, BreakLocation)] -- break location uniquely numbered
}
+-- The context of an evaluation in progress that stopped at a breakpoint
+data EvalInProgress
+ = EvalInProgress
+ { evalStmt :: String,
+ evalSpan :: SrcSpan,
+ evalThreadId :: ThreadId,
+ evalResumeHandle :: GHC.ResumeHandle }
+
instance Outputable ActiveBreakPoints where
ppr activeBrks = prettyLocations $ breakLocations activeBrks
io :: IO a -> GHCi a
io m = GHCi { unGHCi = \s -> m >>= return }
-popResume :: GHCi (Maybe (SrcSpan, ThreadId, GHC.ResumeHandle))
+popResume :: GHCi (Maybe EvalInProgress)
popResume = do
st <- getGHCiState
case (resume st) of
[] -> return Nothing
(x:xs) -> do setGHCiState $ st { resume = xs } ; return (Just x)
-pushResume :: SrcSpan -> ThreadId -> GHC.ResumeHandle -> GHCi ()
-pushResume span threadId resumeAction = do
+pushResume :: EvalInProgress -> GHCi ()
+pushResume eval = do
st <- getGHCiState
let oldResume = resume st
- setGHCiState $ st { resume = (span, threadId, resumeAction) : oldResume }
+ setGHCiState $ st { resume = eval : oldResume }
discardResumeContext :: GHCi ()
discardResumeContext = do
st <- getGHCiState
setGHCiState st { resume = [] }
-showForUser :: SDoc -> GHCi String
-showForUser doc = do
+printForUser :: SDoc -> GHCi ()
+printForUser doc = do
session <- getSession
unqual <- io (GHC.getPrintUnqual session)
- return $! showSDocForUser unqual doc
+ io $ Outputable.printForUser stdout unqual doc
-- --------------------------------------------------------------------------
-- timing & statistics