X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FInteractiveUI.hs;h=3de1c7bc50862448e03d37ff57c7e9530f318c66;hb=4da439a6b1e343fc5216d5c6bb51858c6d9aacd6;hp=1ac2df8bcbb97bbb624dec440681477422c2a0cb;hpb=0a183bd0d5d9952699295fa9506de0df97392ef5;p=ghc-hetmet.git diff --git a/compiler/ghci/InteractiveUI.hs b/compiler/ghci/InteractiveUI.hs index 1ac2df8..3de1c7b 100644 --- a/compiler/ghci/InteractiveUI.hs +++ b/compiler/ghci/InteractiveUI.hs @@ -552,53 +552,34 @@ runStmt stmt step result <- io $ withProgName (progname st) $ withArgs (args st) $ GHC.runStmt session stmt step afterRunStmt result - return (isRunResultOk result) -afterRunStmt :: GHC.RunResult -> GHCi (Maybe (Bool,[Name])) +afterRunStmt :: GHC.RunResult -> GHCi Bool + -- False <=> the statement failed to compile +afterRunStmt (GHC.RunException e) = throw e afterRunStmt run_result = do - mb_result <- switchOnRunResult run_result - -- possibly print the type and revert CAFs after evaluating an expression - show_types <- isOptionSet ShowType session <- getSession - case mb_result of - Nothing -> return () - Just (is_break,names) -> - when (is_break || show_types) $ - mapM_ (showTypeOfName session) names - + case run_result of + GHC.RunOk names -> do + show_types <- isOptionSet ShowType + when show_types $ mapM_ (showTypeOfName session) names + GHC.RunBreak _ names _ -> do + resumes <- io $ GHC.getResumeContext session + printForUser $ ptext SLIT("Stopped at") <+> + ppr (GHC.resumeSpan (head resumes)) + mapM_ (showTypeOfName session) names + -- run the command set with ":set stop " + st <- getGHCiState + runCommand (stop st) + return () + _ -> return () + flushInterpBuffers io installSignalHandlers b <- isOptionSet RevertCAFs io (when b revertCAFs) - return mb_result - - -switchOnRunResult :: GHC.RunResult -> GHCi (Maybe (Bool,[Name])) -switchOnRunResult GHC.RunFailed = return Nothing -switchOnRunResult (GHC.RunException e) = throw e -switchOnRunResult (GHC.RunOk names) = return $ Just (False,names) -switchOnRunResult (GHC.RunBreak threadId names info) = do - session <- getSession - Just mod_info <- io $ GHC.getModuleInfo session (GHC.breakInfo_module info) - let modBreaks = GHC.modInfoModBreaks mod_info - let ticks = GHC.modBreaks_locs modBreaks - - -- display information about the breakpoint - let location = ticks ! GHC.breakInfo_number info - printForUser $ ptext SLIT("Stopped at") <+> ppr location - - -- run the command set with ":set stop " - st <- getGHCiState - runCommand (stop st) - - return (Just (True,names)) - - -isRunResultOk :: GHC.RunResult -> Bool -isRunResultOk (GHC.RunOk _) = True -isRunResultOk _ = False + return (case run_result of GHC.RunOk _ -> True; _ -> False) showTypeOfName :: Session -> Name -> GHCi ()