summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2021-09-08 11:17:38 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-09-17 09:45:36 -0400
commitc662ac7e39a0a2fb85d4ab17ae71d54752d24f39 (patch)
tree01ec2534a67671f010fb985f00fce1a4cd492f99 /compiler/GHC/Iface
parentda60e6276e4b71217e2e75dfa49f2d460b526af3 (diff)
downloadhaskell-c662ac7e39a0a2fb85d4ab17ae71d54752d24f39.tar.gz
Refactor module dependencies code
* moved deps related code into GHC.Unit.Module.Deps * refactored Deps module to not export Dependencies constructor to help maintaining invariants
Diffstat (limited to 'compiler/GHC/Iface')
-rw-r--r--compiler/GHC/Iface/Load.hs28
-rw-r--r--compiler/GHC/Iface/Make.hs2
-rw-r--r--compiler/GHC/Iface/Recomp.hs18
-rw-r--r--compiler/GHC/Iface/Rename.hs13
4 files changed, 11 insertions, 50 deletions
diff --git a/compiler/GHC/Iface/Load.hs b/compiler/GHC/Iface/Load.hs
index dc993aa261..c271613b3d 100644
--- a/compiler/GHC/Iface/Load.hs
+++ b/compiler/GHC/Iface/Load.hs
@@ -115,8 +115,6 @@ import GHC.Data.FastString
import Control.Monad
import Data.Map ( toList )
-import qualified Data.Set as Set
-import Data.Set (Set)
import System.FilePath
import System.Directory
import GHC.Driver.Env.KnotVars
@@ -1184,32 +1182,6 @@ pprUsageImport usage usg_mod'
safe | usg_safe usage = text "safe"
| otherwise = text " -/ "
--- | Pretty-print unit dependencies
-pprDeps :: UnitState -> Dependencies -> SDoc
-pprDeps unit_state (Deps { dep_direct_mods = dmods
- , dep_boot_mods = bmods
- , dep_orphs = orphs
- , dep_direct_pkgs = pkgs
- , dep_trusted_pkgs = tps
- , dep_finsts = finsts
- })
- = pprWithUnitState unit_state $
- vcat [text "direct module dependencies:" <+> ppr_set ppr_mod dmods,
- text "boot module dependencies:" <+> ppr_set ppr bmods,
- text "direct package dependencies:" <+> ppr_set ppr pkgs,
- if null tps
- then empty
- else text "trusted package dependencies:" <+> ppr_set ppr tps,
- text "orphans:" <+> fsep (map ppr orphs),
- text "family instance modules:" <+> fsep (map ppr finsts)
- ]
- where
- ppr_mod (GWIB mod IsBoot) = ppr mod <+> text "[boot]"
- ppr_mod (GWIB mod NotBoot) = ppr mod
-
- ppr_set :: Outputable a => (a -> SDoc) -> Set a -> SDoc
- ppr_set w = fsep . fmap w . Set.toAscList
-
pprFixities :: [(OccName, Fixity)] -> SDoc
pprFixities [] = Outputable.empty
pprFixities fixes = text "fixities" <+> pprWithCommas pprFix fixes
diff --git a/compiler/GHC/Iface/Make.hs b/compiler/GHC/Iface/Make.hs
index ed113ef7fd..b28e777a88 100644
--- a/compiler/GHC/Iface/Make.hs
+++ b/compiler/GHC/Iface/Make.hs
@@ -82,7 +82,7 @@ import GHC.Data.FastString
import GHC.Data.Maybe
import GHC.HsToCore.Docs
-import GHC.HsToCore.Usage ( mkUsageInfo, mkUsedNames, mkDependencies )
+import GHC.HsToCore.Usage ( mkUsageInfo, mkUsedNames )
import GHC.Unit
import GHC.Unit.Module.Warnings
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs
index 0abee1a5c0..918460a236 100644
--- a/compiler/GHC/Iface/Recomp.hs
+++ b/compiler/GHC/Iface/Recomp.hs
@@ -973,11 +973,11 @@ addFingerprints hsc_env iface0
(local_env, decls_w_hashes) <-
foldM fingerprint_group (emptyOccEnv, []) groups
- -- when calculating fingerprints, we always need to use canonical
- -- ordering for lists of things. In particular, the mi_deps has various
- -- lists of modules and suchlike, so put these all in canonical order:
+ -- when calculating fingerprints, we always need to use canonical ordering
+ -- for lists of things. The mi_deps has various lists of modules and
+ -- suchlike, which are stored in canonical order:
let sorted_deps :: Dependencies
- sorted_deps = sortDependencies (mi_deps iface0)
+ sorted_deps = mi_deps iface0
-- The export hash of a module depends on the orphan hashes of the
-- orphan modules below us in the dependency tree. This is the way
@@ -1193,16 +1193,6 @@ getOrphanHashes hsc_env mods = do
mapM get_orph_hash mods
-sortDependencies :: Dependencies -> Dependencies
-sortDependencies d
- = Deps { dep_direct_mods = dep_direct_mods d,
- dep_direct_pkgs = dep_direct_pkgs d,
- dep_sig_mods = sort (dep_sig_mods d),
- dep_trusted_pkgs = dep_trusted_pkgs d,
- dep_boot_mods = dep_boot_mods d,
- dep_orphs = sortBy stableModuleCmp (dep_orphs d),
- dep_finsts = sortBy stableModuleCmp (dep_finsts d) }
-
{-
************************************************************************
* *
diff --git a/compiler/GHC/Iface/Rename.hs b/compiler/GHC/Iface/Rename.hs
index e2a89570d3..fdbe0dd55a 100644
--- a/compiler/GHC/Iface/Rename.hs
+++ b/compiler/GHC/Iface/Rename.hs
@@ -128,19 +128,18 @@ rnModExports hsc_env insts iface
$ mapM rnAvailInfo (mi_exports iface)
rnDependencies :: Rename Dependencies
-rnDependencies deps = do
- orphs <- rnDepModules dep_orphs deps
- finsts <- rnDepModules dep_finsts deps
- return deps { dep_orphs = orphs, dep_finsts = finsts }
+rnDependencies deps0 = do
+ deps1 <- dep_orphs_update deps0 (rnDepModules dep_orphs)
+ dep_finsts_update deps1 (rnDepModules dep_finsts)
-rnDepModules :: (Dependencies -> [Module]) -> Dependencies -> ShIfM [Module]
-rnDepModules sel deps = do
+rnDepModules :: (Dependencies -> [Module]) -> [Module] -> ShIfM [Module]
+rnDepModules sel mods = do
hsc_env <- getTopEnv
hmap <- getHoleSubst
-- NB: It's not necessary to test if we're doing signature renaming,
-- because ModIface will never contain module reference for itself
-- in these dependencies.
- fmap (nubSort . concat) . T.forM (sel deps) $ \mod -> do
+ fmap (nubSort . concat) . T.forM mods $ \mod -> do
-- For holes, its necessary to "see through" the instantiation
-- of the hole to get accurate family instance dependencies.
-- For example, if B imports <A>, and <A> is instantiated with