X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2FGhciMonad.hs;h=5494b4ea4c02d8f76db901a0b8b336ef70eade2e;hb=7fc01c4671980ea3c66d549c0ece4d82fd3f5ade;hp=88c8caa06d0a1d3a2f325d049e46a6b6b7a6901b;hpb=de1a1f9f882cf1a5c81c4a152edc001aafd3f8a3;p=ghc-hetmet.git diff --git a/ghc/GhciMonad.hs b/ghc/GhciMonad.hs index 88c8caa..5494b4e 100644 --- a/ghc/GhciMonad.hs +++ b/ghc/GhciMonad.hs @@ -69,7 +69,7 @@ data GHCiState = GHCiState -- remember is here: last_command :: Maybe Command, cmdqueue :: [String], - remembered_ctx :: [Either (CtxtCmd, [String], [String]) String], + remembered_ctx :: [CtxtCmd], -- we remember the :module commands between :loads, so that -- on a :reload we can replay them. See bugs #2049, -- \#1873, #1360. Previously we tried to remember modules that @@ -80,9 +80,10 @@ data GHCiState = GHCiState } data CtxtCmd - = SetContext - | AddModules - | RemModules + = SetContext [String] [String] + | AddModules [String] [String] + | RemModules [String] [String] + | Import String type TickArray = Array Int [(BreakIndex,SrcSpan)] @@ -188,6 +189,12 @@ instance ExceptionMonad GHCi where gcatch m h = GHCi $ \r -> unGHCi m r `gcatch` (\e -> unGHCi (h e) r) gblock (GHCi m) = GHCi $ \r -> gblock (m r) gunblock (GHCi m) = GHCi $ \r -> gunblock (m r) + gmask f = + GHCi $ \s -> gmask $ \io_restore -> + let + g_restore (GHCi m) = GHCi $ \s' -> io_restore (m s') + in + unGHCi (f g_restore) s instance WarnLogMonad GHCi where setWarnings warns = liftGhc $ setWarnings warns @@ -200,11 +207,14 @@ instance Haskeline.MonadException GHCi where catch = gcatch block = gblock unblock = gunblock + -- XXX when Haskeline's MonadException changes, we can drop our + -- deprecated block/unblock methods instance ExceptionMonad (InputT GHCi) where - gcatch = Haskeline.catch - gblock = Haskeline.block - gunblock = Haskeline.unblock + gcatch = Haskeline.catch + gmask f = Haskeline.block (f Haskeline.unblock) -- slightly wrong + gblock = Haskeline.block + gunblock = Haskeline.unblock -- for convenience... getPrelude :: GHCi Module @@ -257,10 +267,6 @@ runStmt expr step = do return GHC.RunFailed) $ do GHC.runStmt expr step -parseImportDecl :: GhcMonad m => String -> m (Maybe (GHC.ImportDecl GHC.RdrName)) -parseImportDecl expr - = GHC.handleSourceError (\e -> GHC.printExceptionAndWarnings e >> return Nothing) (Monad.liftM Just (GHC.parseImportDecl expr)) - resume :: (SrcSpan -> Bool) -> GHC.SingleStep -> GHCi GHC.RunResult resume canLogSpan step = do st <- getGHCiState