give the statements under evaluation in the ":show context" output
[ghc-hetmet.git] / compiler / ghci / GhciMonad.hs
index d63dfb1..f7f2014 100644 (file)
@@ -47,7 +47,7 @@ data GHCiState = GHCiState
        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,
@@ -69,6 +69,14 @@ data ActiveBreakPoints
    , 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 
 
@@ -181,18 +189,18 @@ unsetOption opt
 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