summaryrefslogtreecommitdiff
path: root/compiler/utils
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2019-01-03 18:31:08 +0100
committerSylvain Henry <sylvain@haskus.fr>2019-12-18 13:43:37 +0100
commit58655b9da7599135395417a042f53cfa13b2151d (patch)
treecceacdd2c9848e49d5ebc6ba19d209cc823349a2 /compiler/utils
parenta8f7ecd54821493dc061c55ceebb7e271b17056e (diff)
downloadhaskell-58655b9da7599135395417a042f53cfa13b2151d.tar.gz
Add GHC-API logging hooks
* Add 'dumpAction' hook to DynFlags. It allows GHC API users to catch dumped intermediate codes and information. The format of the dump (Core, Stg, raw text, etc.) is now reported allowing easier automatic handling. * Add 'traceAction' hook to DynFlags. Some dumps go through the trace mechanism (for instance unfoldings that have been considered for inlining). This is problematic because: 1) dumps aren't written into files even with -ddump-to-file on 2) dumps are written on stdout even with GHC API 3) in this specific case, dumping depends on unsafe globally stored DynFlags which is bad for GHC API users We introduce 'traceAction' hook which allows GHC API to catch those traces and to avoid using globally stored DynFlags. * Avoid dumping empty logs via dumpAction/traceAction (but still write empty files to keep the existing behavior)
Diffstat (limited to 'compiler/utils')
-rw-r--r--compiler/utils/Outputable.hs15
1 files changed, 9 insertions, 6 deletions
diff --git a/compiler/utils/Outputable.hs b/compiler/utils/Outputable.hs
index 0dda99020f..b200bd79db 100644
--- a/compiler/utils/Outputable.hs
+++ b/compiler/utils/Outputable.hs
@@ -82,7 +82,7 @@ module Outputable (
-- * Error handling and debugging utilities
pprPanic, pprSorry, assertPprPanic, pprPgmError,
pprTrace, pprTraceDebug, pprTraceWith, pprTraceIt, warnPprTrace,
- pprSTrace, pprTraceException, pprTraceM,
+ pprSTrace, pprTraceException, pprTraceM, pprTraceWithFlags,
trace, pgmError, panic, sorry, assertPanic,
pprDebugAndThen, callStackDoc,
) where
@@ -1186,12 +1186,15 @@ pprTraceDebug str doc x
| debugIsOn && hasPprDebug unsafeGlobalDynFlags = pprTrace str doc x
| otherwise = x
+-- | If debug output is on, show some 'SDoc' on the screen
pprTrace :: String -> SDoc -> a -> a
--- ^ If debug output is on, show some 'SDoc' on the screen
-pprTrace str doc x
- | hasNoDebugOutput unsafeGlobalDynFlags = x
- | otherwise =
- pprDebugAndThen unsafeGlobalDynFlags trace (text str) doc x
+pprTrace str doc x = pprTraceWithFlags unsafeGlobalDynFlags str doc x
+
+-- | If debug output is on, show some 'SDoc' on the screen
+pprTraceWithFlags :: DynFlags -> String -> SDoc -> a -> a
+pprTraceWithFlags dflags str doc x
+ | hasNoDebugOutput dflags = x
+ | otherwise = pprDebugAndThen dflags trace (text str) doc x
pprTraceM :: Applicative f => String -> SDoc -> f ()
pprTraceM str doc = pprTrace str doc (pure ())