X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FDebugger.hs;h=0817259d0f8dc642ec0f95cc302e37f76d6f5c52;hb=cdfbaf4f6d2bafdd7e661eb44c3a4c99cae603a0;hp=16089339c9d35d76efb5362a24c36a0440798d62;hpb=8ea920f1ef9e66e3cecc81822e594943f8957d60;p=ghc-hetmet.git diff --git a/compiler/ghci/Debugger.hs b/compiler/ghci/Debugger.hs index 1608933..0817259 100644 --- a/compiler/ghci/Debugger.hs +++ b/compiler/ghci/Debugger.hs @@ -108,7 +108,6 @@ pprintClosureCommand bindThings force str = do , substFiltered <- filter (not.isTyVarTy) . varEnvElts . getTvSubstEnv $ subst , not . null $ substFiltered , all (flip notElemTvSubst subst) ty_vars --- , pprTrace "subst" (ppr subst) True = True | otherwise = False where bindOnlyTy1 tyv | tyv `elem` ty_vars = AvoidMe @@ -298,11 +297,19 @@ stripUnknowns _ id = id ----------------------------- -- | The :breakpoint command ----------------------------- -bkptOptions :: String -> GHCi () +bkptOptions :: String -> GHCi Bool +bkptOptions "continue" = -- We want to quit if in an inferior session + liftM not isTopLevel +bkptOptions "stop" = do + inside_break <- liftM not isTopLevel + when inside_break $ throwDyn StopChildSession + return False + bkptOptions cmd = do dflags <- getDynFlags bt <- getBkptTable bkptOptions' (words cmd) bt + return False where bkptOptions' ["list"] bt = do let msgs = [ ppr mod <+> colon <+> ppr coords @@ -314,10 +321,6 @@ bkptOptions cmd = do else vcat num_msgs io$ putStrLn msg - bkptOptions' ["stop"] bt = do - inside_break <- liftM not isTopLevel - when inside_break $ throwDyn StopChildSession - bkptOptions' ("add":cmds) bt | [mod_name,line]<- cmds , [(lineNum,[])] <- reads line @@ -374,12 +377,14 @@ bkptOptions cmd = do io$ putStrLn delMsg bkptOptions' _ _ = throwDyn $ CmdLineError $ - "syntax: :breakpoint (list|stop|add|del)" + "syntax: :breakpoint (list|continue|stop|add|del)" +-- Error messages handleBkptEx :: Module -> Debugger.BkptException -> a - handleBkptEx _ NoBkptFound = error "No suitable breakpoint site found" --TODO Automatically add to the next suitable line + handleBkptEx _ NoBkptFound = error "No suitable breakpoint site found" + -- ^ TODO Instead of complaining, set a bkpt in the next suitable line handleBkptEx _ NotNeeded = error "Nothing to do" - handleBkptEx m NotHandled = error$ "Module " ++ showSDoc (ppr m) ++ " was not loaded under debugging mode. Enable debugging mode and reload it" + handleBkptEx m NotHandled = error$ "Module " ++ showSDoc (ppr m) ++ " was not loaded under debugging mode. Enable debugging mode with -fdebugging (and reload your module)" ------------------------- -- Breakpoint Tables @@ -510,7 +515,6 @@ getSiteCoords bt a site , s == site ] -- addModule is dumb and inefficient, but it does the job ---addModule fn siteCoords _ | trace ("addModule: " ++ moduleString (unsafeCoerce# fn) ++ " - " ++ show siteCoords) False = undefined addModule a [] bt = bt {sites = Map.insert a [] (sites bt)} addModule a siteCoords bt | nrows <- maximum$ [i | (_,(i,j)) <- siteCoords ] @@ -525,7 +529,7 @@ isBkptEnabled bt (a,site) | Just bkpts <- bkptsOf bt a , inRange (bounds bkpts) site = bkpts ! site - | otherwise = throwDyn NotHandled -- This is an error + | otherwise = panic "unexpected condition: I don't know that breakpoint site" ----------------- -- Other stuff