[commit: ghc] ghc-8.6: Explicitly tell 'getNameToInstances' mods to load (18cb44d)
git at git.haskell.org
git at git.haskell.org
Thu Aug 23 19:56:44 UTC 2018
Repository : ssh://git@git.haskell.org/ghc
On branch : ghc-8.6
Link : http://ghc.haskell.org/trac/ghc/changeset/18cb44dfae3f0847447da33c9d7a25d2709d838f/ghc
>---------------------------------------------------------------
commit 18cb44dfae3f0847447da33c9d7a25d2709d838f
Author: Alec Theriault <alec.theriault at gmail.com>
Date: Tue Aug 21 16:03:40 2018 -0400
Explicitly tell 'getNameToInstances' mods to load
Calculating which modules to load based on the InteractiveContext means
maintaining a potentially very large GblRdrEnv.
In Haddock's case, it is much cheaper (from a memory perspective) to
just keep track of which modules interfaces we want loaded then hand
these off explicitly to 'getNameToInstancesIndex'.
Bumps haddock submodule.
Reviewers: alexbiehl, bgamari
Reviewed By: alexbiehl
Subscribers: rwbarton, thomie, carter
Differential Revision: https://phabricator.haskell.org/D5003
(cherry picked from commit c971e1193fa44bb507d1806d5bb61768670dc912)
>---------------------------------------------------------------
18cb44dfae3f0847447da33c9d7a25d2709d838f
compiler/main/GHC.hs | 18 +++++++++++++-----
utils/haddock | 2 +-
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs
index 2b25646..f80394e 100644
--- a/compiler/main/GHC.hs
+++ b/compiler/main/GHC.hs
@@ -300,7 +300,8 @@ import HscMain
import GhcMake
import DriverPipeline ( compileOne' )
import GhcMonad
-import TcRnMonad ( finalSafeMode, fixSafeInstances )
+import TcRnMonad ( finalSafeMode, fixSafeInstances, initIfaceTcRn )
+import LoadIface ( loadSysInterface )
import TcRnTypes
import Packages
import NameSet
@@ -1245,13 +1246,20 @@ getGRE = withSession $ \hsc_env-> return $ ic_rn_gbl_env (hsc_IC hsc_env)
-- by 'Name'. Each name's lists will contain every instance in which that name
-- is mentioned in the instance head.
getNameToInstancesIndex :: GhcMonad m
- => [Module] -- ^ visible modules. An orphan instance will be returned if and
- -- only it is visible from at least one module in the list.
+ => [Module] -- ^ visible modules. An orphan instance will be returned
+ -- if it is visible from at least one module in the list.
+ -> Maybe [Module] -- ^ modules to load. If this is not specified, we load
+ -- modules for everything that is in scope unqualified.
-> m (Messages, Maybe (NameEnv ([ClsInst], [FamInst])))
-getNameToInstancesIndex visible_mods = do
+getNameToInstancesIndex visible_mods mods_to_load = do
hsc_env <- getSession
liftIO $ runTcInteractive hsc_env $
- do { loadUnqualIfaces hsc_env (hsc_IC hsc_env)
+ do { case mods_to_load of
+ Nothing -> loadUnqualIfaces hsc_env (hsc_IC hsc_env)
+ Just mods ->
+ let doc = text "Need interface for reporting instances in scope"
+ in initIfaceTcRn $ mapM_ (loadSysInterface doc) mods
+
; InstEnvs {ie_global, ie_local} <- tcGetInstEnvs
; let visible_mods' = mkModuleSet visible_mods
; (pkg_fie, home_fie) <- tcGetFamInstEnvs
diff --git a/utils/haddock b/utils/haddock
index 9765c10..3902a80 160000
--- a/utils/haddock
+++ b/utils/haddock
@@ -1 +1 @@
-Subproject commit 9765c10a27013b5c9168ee507d1f3b34cb4be26f
+Subproject commit 3902a807acf4bccf5cd01d2115bed10d57316661
More information about the ghc-commits
mailing list