import Maybes
import FastString
import Util
-
+import Coverage
+import IOEnv
import Data.IORef
+
\end{code}
%************************************************************************
%************************************************************************
\begin{code}
-deSugar :: HscEnv -> TcGblEnv -> IO (Maybe ModGuts)
+deSugar :: HscEnv -> ModLocation -> TcGblEnv -> IO (Maybe ModGuts)
-- Can modify PCS by faulting in more declarations
deSugar hsc_env
+ mod_loc
tcg_env@(TcGblEnv { tcg_mod = mod,
tcg_src = hsc_src,
tcg_type_env = type_env,
-- Desugar the program
; let export_set = availsToNameSet exports
; let auto_scc = mkAutoScc mod export_set
-
+ ; let noDbgSites = []
; mb_res <- case ghcMode dflags of
- JustTypecheck -> return (Just ([], [], NoStubs))
- _ -> initDs hsc_env mod rdr_env type_env $ do
- { core_prs <- dsTopLHsBinds auto_scc binds
+ JustTypecheck -> return (Just ([], [], NoStubs, noHpcInfo, noDbgSites))
+ _ -> do (binds_cvr,ds_hpc_info)
+ <- if opt_Hpc
+ then addCoverageTicksToBinds dflags mod mod_loc binds
+ else return (binds, noHpcInfo)
+ initDs hsc_env mod rdr_env type_env $ do
+ { core_prs <- dsTopLHsBinds auto_scc binds_cvr
; (ds_fords, foreign_prs) <- dsForeigns fords
; let all_prs = foreign_prs ++ core_prs
local_bndrs = mkVarSet (map fst all_prs)
; ds_rules <- mappM (dsRule mod local_bndrs) rules
- ; return (all_prs, catMaybes ds_rules, ds_fords)
+ ; return (all_prs, catMaybes ds_rules, ds_fords, ds_hpc_info)
+ ; dbgSites_var <- getBkptSitesDs
+ ; dbgSites <- ioToIOEnv$ readIORef dbgSites_var
+ ; return (all_prs, catMaybes ds_rules, ds_fords, ds_hpc_info, dbgSites)
}
; case mb_res of {
Nothing -> return Nothing ;
- Just (all_prs, ds_rules, ds_fords) -> do
+ Just (all_prs, ds_rules, ds_fords,ds_hpc_info, dbgSites) -> do
{ -- Add export flags to bindings
keep_alive <- readIORef keep_var
mg_fam_insts = fam_insts,
mg_rules = ds_rules,
mg_binds = ds_binds,
- mg_foreign = ds_fords }
-
+ mg_foreign = ds_fords,
+ mg_hpc_info = ds_hpc_info,
+ mg_dbg_sites = dbgSites }
; return (Just mod_guts)
}}}