X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FDebugger.hs;h=d31d4d67d157d8428bdd2c713fad02d5b0fce26e;hb=b4ad75e9692f104d96b4d6a76ec0eed362cecd94;hp=36c784b2389d17b119ba7d0151d7a610ed9bb97a;hpb=9e95b0d6162ea28ad250339affa0d67d2919ef6d;p=ghc-hetmet.git diff --git a/compiler/ghci/Debugger.hs b/compiler/ghci/Debugger.hs index 36c784b..d31d4d6 100644 --- a/compiler/ghci/Debugger.hs +++ b/compiler/ghci/Debugger.hs @@ -25,6 +25,7 @@ import Name import UniqSupply import TcType import GHC +import DynFlags import InteractiveEval import Outputable import Pretty ( Mode(..), showDocWith ) @@ -128,6 +129,10 @@ bindSuspensions cms@(Session ref) t = do let (terms,names) = unzip tt' return (Term ty dc v terms, concat names) , fPrim = \ty n ->return (Prim ty n,[]) + , fNewtypeWrap = + \ty dc t -> do + (term, names) <- t + return (NewtypeWrap ty dc term, names) } doSuspension freeNames ct mb_ty hval _name = do name <- atomicModifyIORef freeNames (\x->(tail x, head x)) @@ -138,11 +143,14 @@ bindSuspensions cms@(Session ref) t = do -- A custom Term printer to enable the use of Show instances showTerm :: Session -> Term -> IO SDoc -showTerm cms@(Session ref) = cPprTerm cPpr +showTerm cms@(Session ref) term = do + dflags <- GHC.getSessionDynFlags cms + if dopt Opt_PrintEvldWithShow dflags + then cPprTerm (liftM2 (++) (\_y->[cPprShowable]) cPprTermBase) term + else cPprTerm cPprTermBase term where - cPpr = \p-> cPprShowable : cPprTermBase p - cPprShowable prec ty _ val tt = - if not (all isFullyEvaluatedTerm tt) + cPprShowable prec t@Term{ty=ty, val=val} = + if not (isFullyEvaluatedTerm t) then return Nothing else do hsc_env <- readIORef ref @@ -165,6 +173,10 @@ showTerm cms@(Session ref) = cPprTerm cPpr `finally` do writeIORef ref hsc_env GHC.setSessionDynFlags cms dflags + cPprShowable prec NewtypeWrap{ty=new_ty,wrapped_term=t} = + cPprShowable prec t{ty=new_ty} + cPprShowable _ _ = panic "cPprShowable - unreachable" + needsParens ('"':_) = False -- some simple heuristics to see whether parens -- are redundant in an arbitrary Show output needsParens ('(':_) = False