summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface/Make.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Iface/Make.hs')
-rw-r--r--compiler/GHC/Iface/Make.hs26
1 files changed, 17 insertions, 9 deletions
diff --git a/compiler/GHC/Iface/Make.hs b/compiler/GHC/Iface/Make.hs
index 416cd56d9e..86ff68272d 100644
--- a/compiler/GHC/Iface/Make.hs
+++ b/compiler/GHC/Iface/Make.hs
@@ -89,6 +89,7 @@ import GHC.Unit.Module.Warnings
import GHC.Unit.Module.ModIface
import GHC.Unit.Module.ModDetails
import GHC.Unit.Module.ModGuts
+import GHC.Unit.Module.ModSummary
import GHC.Unit.Module.Deps
import Data.Function
@@ -96,6 +97,7 @@ import Data.List ( findIndex, mapAccumL, sortBy )
import Data.Ord
import Data.IORef
+
{-
************************************************************************
* *
@@ -106,9 +108,10 @@ import Data.IORef
mkPartialIface :: HscEnv
-> ModDetails
+ -> ModSummary
-> ModGuts
-> PartialModIface
-mkPartialIface hsc_env mod_details
+mkPartialIface hsc_env mod_details mod_summary
ModGuts{ mg_module = this_mod
, mg_hsc_src = hsc_src
, mg_usages = usages
@@ -125,7 +128,7 @@ mkPartialIface hsc_env mod_details
, mg_arg_docs = arg_docs
}
= mkIface_ hsc_env this_mod hsc_src used_th deps rdr_env fix_env warns hpc_info self_trust
- safe_mode usages doc_hdr decl_docs arg_docs mod_details
+ safe_mode usages doc_hdr decl_docs arg_docs mod_summary mod_details
-- | Fully instantiate an interface. Adds fingerprints and potentially code
-- generator produced information.
@@ -177,9 +180,10 @@ updateDecl decls (Just CgInfos{ cgNonCafs = NonCaffySet non_cafs, cgLFInfos = lf
mkIfaceTc :: HscEnv
-> SafeHaskellMode -- The safe haskell mode
-> ModDetails -- gotten from mkBootModDetails, probably
+ -> ModSummary
-> TcGblEnv -- Usages, deprecations, etc
-> IO ModIface
-mkIfaceTc hsc_env safe_mode mod_details
+mkIfaceTc hsc_env safe_mode mod_details mod_summary
tc_result@TcGblEnv{ tcg_mod = this_mod,
tcg_src = hsc_src,
tcg_imports = imports,
@@ -196,7 +200,8 @@ mkIfaceTc hsc_env safe_mode mod_details
let pluginModules = map lpModule (hsc_plugins hsc_env)
let home_unit = hsc_home_unit hsc_env
deps <- mkDependencies (homeUnitId home_unit)
- (map mi_module pluginModules) tc_result
+ (map mi_module pluginModules)
+ tc_result
let hpc_info = emptyHpcInfo other_hpc_info
used_th <- readIORef tc_splice_used
dep_files <- (readIORef dependent_files)
@@ -207,8 +212,8 @@ mkIfaceTc hsc_env safe_mode mod_details
-- but if you pass that in here, we'll decide it's the local
-- module and does not need to be recorded as a dependency.
-- See Note [Identity versus semantic module]
- usages <- mkUsageInfo hsc_env this_mod (imp_mods imports) used_names
- dep_files merged pluginModules
+ usages <- mkUsageInfo hsc_env this_mod hsc_src (imp_mods imports) used_names
+ dep_files merged
(doc_hdr', doc_map, arg_map) <- extractDocs tc_result
@@ -217,7 +222,7 @@ mkIfaceTc hsc_env safe_mode mod_details
used_th deps rdr_env
fix_env warns hpc_info
(imp_trust_own_pkg imports) safe_mode usages
- doc_hdr' doc_map arg_map
+ doc_hdr' doc_map arg_map mod_summary
mod_details
mkFullIface hsc_env partial_iface Nothing
@@ -231,12 +236,13 @@ mkIface_ :: HscEnv -> Module -> HscSource
-> Maybe HsDocString
-> DeclDocMap
-> ArgDocMap
+ -> ModSummary
-> ModDetails
-> PartialModIface
mkIface_ hsc_env
this_mod hsc_src used_th deps rdr_env fix_env src_warns
hpc_info pkg_trust_req safe_mode usages
- doc_hdr decl_docs arg_docs
+ doc_hdr decl_docs arg_docs mod_summary
ModDetails{ md_insts = insts,
md_fam_insts = fam_insts,
md_rules = rules,
@@ -313,7 +319,9 @@ mkIface_ hsc_env
mi_decl_docs = decl_docs,
mi_arg_docs = arg_docs,
mi_final_exts = (),
- mi_ext_fields = emptyExtensibleFields }
+ mi_ext_fields = emptyExtensibleFields,
+ mi_src_hash = ms_hs_hash mod_summary
+ }
where
cmp_rule = lexicalCompareFS `on` ifRuleName
-- Compare these lexicographically by OccName, *not* by unique,