diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2021-09-08 11:17:38 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-09-17 09:45:36 -0400 |
commit | c662ac7e39a0a2fb85d4ab17ae71d54752d24f39 (patch) | |
tree | 01ec2534a67671f010fb985f00fce1a4cd492f99 /compiler/GHC/Iface | |
parent | da60e6276e4b71217e2e75dfa49f2d460b526af3 (diff) | |
download | haskell-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.hs | 28 | ||||
-rw-r--r-- | compiler/GHC/Iface/Make.hs | 2 | ||||
-rw-r--r-- | compiler/GHC/Iface/Recomp.hs | 18 | ||||
-rw-r--r-- | compiler/GHC/Iface/Rename.hs | 13 |
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 |