Commit c971e119 authored by Alec Theriault's avatar Alec Theriault Committed by Ben Gamari

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
parent 92db10bc
...@@ -300,7 +300,8 @@ import HscMain ...@@ -300,7 +300,8 @@ import HscMain
import GhcMake import GhcMake
import DriverPipeline ( compileOne' ) import DriverPipeline ( compileOne' )
import GhcMonad import GhcMonad
import TcRnMonad ( finalSafeMode, fixSafeInstances ) import TcRnMonad ( finalSafeMode, fixSafeInstances, initIfaceTcRn )
import LoadIface ( loadSysInterface )
import TcRnTypes import TcRnTypes
import Packages import Packages
import NameSet import NameSet
...@@ -1247,13 +1248,20 @@ getGRE = withSession $ \hsc_env-> return $ ic_rn_gbl_env (hsc_IC hsc_env) ...@@ -1247,13 +1248,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 -- by 'Name'. Each name's lists will contain every instance in which that name
-- is mentioned in the instance head. -- is mentioned in the instance head.
getNameToInstancesIndex :: GhcMonad m getNameToInstancesIndex :: GhcMonad m
=> [Module] -- ^ visible modules. An orphan instance will be returned if and => [Module] -- ^ visible modules. An orphan instance will be returned
-- only it is visible from at least one module in the list. -- 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]))) -> m (Messages, Maybe (NameEnv ([ClsInst], [FamInst])))
getNameToInstancesIndex visible_mods = do getNameToInstancesIndex visible_mods mods_to_load = do
hsc_env <- getSession hsc_env <- getSession
liftIO $ runTcInteractive hsc_env $ 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 ; InstEnvs {ie_global, ie_local} <- tcGetInstEnvs
; let visible_mods' = mkModuleSet visible_mods ; let visible_mods' = mkModuleSet visible_mods
; (pkg_fie, home_fie) <- tcGetFamInstEnvs ; (pkg_fie, home_fie) <- tcGetFamInstEnvs
......
Subproject commit 488aa22f393c0addb4c0e0b63cfe0aaea32b85d7 Subproject commit 9ef12f3c2f0ef2948e6f4bd38fdfa002c416ab09
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment