summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2022-04-23 17:25:45 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2022-06-02 15:42:59 +0000
commitf065804eb7afa8a7902ccc779cf2c9fae520f956 (patch)
tree066694e8ffcf8c8f0b913cbc25fb58af557dea0a /compiler
parentce9f986b0a1b77a13ee6ee613c557ef007d20a1e (diff)
downloadhaskell-f065804eb7afa8a7902ccc779cf2c9fae520f956.tar.gz
Hoist auto `mkModBreaks` and `writeMixEntries` conditions to caller
No need to inline traversing a maybe for `mkModBreaks`. And better to make each function do one thing and let the caller deside when than scatter the decision making and make the caller seem more imperative.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/GHC/HsToCore/Coverage.hs27
1 files changed, 14 insertions, 13 deletions
diff --git a/compiler/GHC/HsToCore/Coverage.hs b/compiler/GHC/HsToCore/Coverage.hs
index a4f344eaf9..c4f04d56c8 100644
--- a/compiler/GHC/HsToCore/Coverage.hs
+++ b/compiler/GHC/HsToCore/Coverage.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE MonadComprehensions #-}
{-# LANGUAGE NondecreasingIndentation #-}
{-# LANGUAGE TypeFamilies #-}
@@ -61,6 +62,7 @@ import Control.Monad
import Data.List (isSuffixOf, intersperse)
import Data.Array
import Data.Time
+import Data.Traversable (for)
import System.Directory
import Trace.Hpc.Mix
@@ -141,8 +143,11 @@ addTicksToBinds (CoverageConfig
let tickCount = tickBoxCount st
entries = reverse $ mixEntries st
- hashNo <- writeMixEntries dflags mod tickCount entries orig_file2
- modBreaks <- mkModBreaks m_interp dflags mod tickCount entries
+ modBreaks <- for [i | i <- m_interp, breakpointsEnabled dflags] $
+ \interp -> mkModBreaks interp mod tickCount entries
+ hashNo <- if gopt Opt_Hpc dflags
+ then writeMixEntries (hpcDir dflags) mod tickCount entries orig_file2
+ else return 0 -- dummy hash when none are written
putDumpFileMaybe logger Opt_D_dump_ticked "HPC" FormatHaskell
(pprLHsBinds binds1)
@@ -164,24 +169,22 @@ guessSourceFile binds orig_file =
_ -> orig_file
-mkModBreaks :: Maybe Interp -> DynFlags -> Module -> Int -> [MixEntry_] -> IO (Maybe ModBreaks)
-mkModBreaks m_interp dflags mod count entries
- | Just interp <- m_interp
- , breakpointsEnabled dflags = do
+mkModBreaks :: Interp -> Module -> Int -> [MixEntry_] -> IO ModBreaks
+mkModBreaks interp mod count entries
+ = do
breakArray <- GHCi.newBreakArray interp (length entries)
ccs <- mkCCSArray interp mod count entries
let
locsTicks = listArray (0,count-1) [ span | (span,_,_,_) <- entries ]
varsTicks = listArray (0,count-1) [ vars | (_,_,vars,_) <- entries ]
declsTicks = listArray (0,count-1) [ decls | (_,decls,_,_) <- entries ]
- return $ Just $ emptyModBreaks
+ return $ emptyModBreaks
{ modBreaks_flags = breakArray
, modBreaks_locs = locsTicks
, modBreaks_vars = varsTicks
, modBreaks_decls = declsTicks
, modBreaks_ccs = ccs
}
- | otherwise = return Nothing
mkCCSArray
:: Interp -> Module -> Int -> [MixEntry_]
@@ -199,12 +202,10 @@ mkCCSArray interp modul count entries
writeMixEntries
- :: DynFlags -> Module -> Int -> [MixEntry_] -> FilePath -> IO Int
-writeMixEntries dflags mod count entries filename
- | not (gopt Opt_Hpc dflags) = return 0
- | otherwise = do
+ :: FilePath -> Module -> Int -> [MixEntry_] -> FilePath -> IO Int
+writeMixEntries hpc_dir mod count entries filename
+ = do
let
- hpc_dir = hpcDir dflags
mod_name = moduleNameString (moduleName mod)
hpc_mod_dir