remote-debugger 0.1.1 → 0.2.1
raw patch · 3 files changed
+25/−18 lines, 3 filesdep ~ghc
Dependency ranges changed: ghc
Files
- remote-debugger.cabal +2/−2
- src/DebuggerImpl.hs +16/−14
- src/ParserMonad.hs +7/−2
remote-debugger.cabal view
@@ -1,5 +1,5 @@ name: remote-debugger-version: 0.1.1+version: 0.2.1 description: Wraper to GHC debugger API allowing debugging throught socket. Used in haskell-idea-plugin. license: BSD3 license-file: LICENSE@@ -23,7 +23,7 @@ hs-source-dirs: src build-depends: base >= 3 && <5,- ghc,+ ghc == 7.8.3, ghc-paths, array, network,
src/DebuggerImpl.hs view
@@ -286,12 +286,13 @@ changeBreakFlagInModBreaks :: String -> Int -> Bool -> DebuggerMonad Bool changeBreakFlagInModBreaks modName flagIndex flagValue = do modBreaks <- getModBreaks modName+ dflags <- GHC.getSessionDynFlags let breaksFlags = modBreaks_flags modBreaks- liftIO $ setBreakFlag breaksFlags flagIndex flagValue+ liftIO $ setBreakFlag dflags breaksFlags flagIndex flagValue -setBreakFlag :: BreakArray -> Int -> Bool -> IO Bool-setBreakFlag bArr ind flag | flag = setBreakOn bArr ind- | otherwise = setBreakOff bArr ind+setBreakFlag :: DynFlags -> BreakArray -> Int -> Bool -> IO Bool+setBreakFlag dynFlags bArr ind flag | flag = setBreakOn dynFlags bArr ind+ | otherwise = setBreakOff dynFlags bArr ind -- | ':delete <module name> <break index>' command deleteBreakpoint :: String -> Int -> DebuggerMonad Result@@ -446,7 +447,7 @@ getThingType :: TyThing -> DebuggerMonad (String) getThingType (AnId id') = do- showSDoc $ pprTypeForUser False (GHC.idType id')+ showSDoc $ pprTypeForUser (GHC.idType id') getThingType _ = fail "Shouldn't be here" getThingValue :: TyThing -> DebuggerMonad (String)@@ -539,7 +540,7 @@ getExprType :: String -> DebuggerMonad Result getExprType expr = do ty <- GHC.exprType expr- doc <- showSDoc $ pprTypeForUser False ty+ doc <- showSDoc $ pprTypeForUser ty return [ ("info", ConsStr "expression type"), ("type", ConsStr doc)@@ -551,7 +552,7 @@ -- it seems that __evalResult is not stored after evaluating, so it is safe to do such binding RunOk [name] <- GHC.runStmt ("let __evalResult = " ++ str) GHC.RunToCompletion Just (AnId id') <- GHC.lookupName name- type' <- showSDoc $ pprTypeForUser False (GHC.idType id')+ type' <- showSDoc $ pprTypeForUser (GHC.idType id') term <- GHC.obtainTermFromId 100 force id' value <- showOutputable term return [@@ -598,14 +599,14 @@ case flag of "-fbreak-on-error" -> do dflags <- GHC.getSessionDynFlags- let dflags' = DynFlags.dopt_set dflags DynFlags.Opt_BreakOnError- dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnException+ let dflags' = DynFlags.gopt_set dflags DynFlags.Opt_BreakOnError+ dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnException GHC.setSessionDynFlags dflags'' return [("info", ConsStr "break set")] "-fbreak-on-exception" -> do dflags <- GHC.getSessionDynFlags- let dflags' = DynFlags.dopt_set dflags DynFlags.Opt_BreakOnException- dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnError+ let dflags' = DynFlags.gopt_set dflags DynFlags.Opt_BreakOnException+ dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnError GHC.setSessionDynFlags dflags'' return [("info", ConsStr "break set")] _ -> return [("info", ConsStr "exception"), ("message", ConsStr "Unknown \"set\" flag")]@@ -619,8 +620,8 @@ where unsetBreak = do dflags <- GHC.getSessionDynFlags- let dflags' = DynFlags.dopt_unset dflags DynFlags.Opt_BreakOnException- dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnError+ let dflags' = DynFlags.gopt_unset dflags DynFlags.Opt_BreakOnException+ dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnError GHC.setSessionDynFlags dflags'' return [("info", ConsStr "break unset")] @@ -665,7 +666,8 @@ modBreaks <- getModBreaks modName -- modBreaks_flags - 0 if unset 1 if set printString "# modBreaks_flags:"- liftIO $ showBreakArray $ modBreaks_flags $ modBreaks+ dynFlags <- getSessionDynFlags+ liftIO $ showBreakArray dynFlags $ modBreaks_flags $ modBreaks -- modBreaks_locs - breakpoint index and SrcSpan printString "# modBreaks_locs:" mapM (\(i, e) -> printString (show i ++ " : " ++ show e)) $ assocs $ modBreaks_locs $ modBreaks
src/ParserMonad.hs view
@@ -1,6 +1,7 @@ module ParserMonad where import Data.Char+import Control.Applicative hiding (many, (<|>)) -- | Parser type newtype Parser a = P (String -> [ (a, String) ])@@ -22,6 +23,10 @@ return x = P $ \cs -> [ (x, cs) ] fail _ = P $ \_ -> [] +instance Applicative Parser where+ pure x = P $ \cs -> [ (x, cs) ]+ a <*> b = a >>= (\f -> fmap f b)+ instance Functor Parser where fmap f p = p >>= \x -> return (f x) @@ -88,7 +93,7 @@ -- | Skips spacing characters (more than zero) waitAndSkipSpaces :: Parser () waitAndSkipSpaces = do- restSatisfiedChars isSpace+ _ <- restSatisfiedChars isSpace return () -- | Returns remaining input@@ -100,7 +105,7 @@ end :: Parser () end = do b <- do {- c <- anyChar ;+ _ <- anyChar ; return False ; } <|> return True if b then return () else fail "End wasn't reached"