X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FGhciMonad.hs;h=f7f2014ea29c5d25d6483cbc8b44845a5fcaedca;hb=7ac266d097639620e4fea22c40450c8d7822f5fb;hp=30d07e48251ab4dbacee76b0b3ee38b9044a537a;hpb=3a0ddd1f757d1c44c98227f2b2587f1b1949c897;p=ghc-hetmet.git diff --git a/compiler/ghci/GhciMonad.hs b/compiler/ghci/GhciMonad.hs index 30d07e4..f7f2014 100644 --- a/compiler/ghci/GhciMonad.hs +++ b/compiler/ghci/GhciMonad.hs @@ -43,10 +43,11 @@ data GHCiState = GHCiState 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, @@ -68,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 @@ -180,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