on master help sign in
Delete redundant code (#1199)
commit2e704bdabde38a4147ff080395602232dd609110 authorNeil Mitchell <35463327+neil-da@users.noreply.github.com> dateThu 16 May 2019, 17:34 (7 years ago) parent46c3867
3 files changed+10−147
src/Development/IDE/Functions/Compile.hs+8−102 src/Development/IDE/State/RuleTypes.hs−8 src/Development/IDE/State/Rules.hs+2−37
src/Development/IDE/Functions/Compile.hs+8−102
@@ -45,8 +45,6 @@ import MkIface
4545import NameCache
4646import StringBuffer as SB
4747import TidyPgm
48−import InstEnv
49−import FamInstEnv
5048import qualified GHC.LanguageExtensions as LangExt
5149
5250import Control.DeepSeq
@@ -139,16 +137,14 @@ typecheckModule
139137 :: IdeOptions
140138 -> ParsedModule
141139 -> HscEnv
142− -> UniqSupply
143140 -> [TcModuleResult]
144− -> [LoadPackageResult]
145141 -> ParsedModule
146142 -> IO ([FileDiagnostic], Maybe TcModuleResult)
147−typecheckModule opt mod packageState uniqSupply deps pkgs pm =
143+typecheckModule opt mod packageState deps pm =
148144 fmap (either (, Nothing) (second Just)) $ Ex.runExceptT $
149145 runGhcSessionExcept opt (Just mod) packageState $
150146 catchSrcErrors $ do
151− setupEnv uniqSupply deps pkgs
147+ setupEnv deps
152148 (warnings, tcm) <- withWarnings "Typechecker" $ \tweak ->
153149 GHC.typecheckModule pm{pm_mod_summary = tweak $ pm_mod_summary pm}
154150 tcm2 <- mkTcModuleResult (WriteInterface $ optWriteIface opt) tcm
@@ -158,23 +154,13 @@ typecheckModule opt mod packageState uniqSupply deps pkgs pm =
158154loadPackage ::
159155 IdeOptions
160156 -> HscEnv
161− -> UniqSupply
162− -> [LoadPackageResult]
163157 -> InstalledUnitId
164158 -> IO (Either [FileDiagnostic] LoadPackageResult)
165−loadPackage opt packageState us lps p =
159+loadPackage opt packageState p =
166160 Ex.runExceptT $
167161 runGhcSessionExcept opt Nothing packageState $
168162 catchSrcErrors $ do
169− setupEnv us [] lps
170− dflags <- hsc_dflags <$> getSession
171− exposedMods <- liftIO $ exposedModules <$> getPackage dflags p
172− let mods =
173− [ Module (DefiniteUnitId (DefUnitId p)) mod
174− | (mod, _mbParent) <- exposedMods
175− , False {- HLINT ignore "Short-circuited list comprehension" -}
176− ]
177− forM_ mods $ \mod -> GHC.getModuleInfo mod
163+ setupEnv []
178164 -- this populates the namecache and external package state
179165 session <- getSession
180166 modEnv <- nsNames <$> liftIO (readIORef $ hsc_NC session)
@@ -187,16 +173,14 @@ compileModule
187173 :: IdeOptions
188174 -> ParsedModule
189175 -> HscEnv
190− -> UniqSupply
191176 -> [TcModuleResult]
192− -> [LoadPackageResult]
193177 -> TcModuleResult
194178 -> IO ([FileDiagnostic], Maybe GhcModule)
195−compileModule opt mod packageState uniqSupply deps pkgs tmr =
179+compileModule opt mod packageState deps tmr =
196180 fmap (either (, Nothing) (second Just)) $ Ex.runExceptT $
197181 runGhcSessionExcept opt (Just mod) packageState $
198182 catchSrcErrors $ do
199− setupEnv uniqSupply (deps ++ [tmr]) pkgs
183+ setupEnv (deps ++ [tmr])
200184
201185 let tm = tmrModule tmr
202186 session <- getSession
@@ -259,29 +243,6 @@ moduleImportPaths pm
259243 rootModDir = takeDirectory . moduleNameSlashes . GHC.moduleName $ mod'
260244
261245
262−-- When we make a fresh GHC environment, the OrigNameCache comes already partially
263−-- populated. So to be safe, we simply extend this one.
264−mkNameCache :: GhcMonad m => UniqSupply -> [TcModuleResult] -> [LoadPackageResult] -> m NameCache
265−mkNameCache uniqSupply tms pkgs = do
266− session <- getSession
267− onc <- nsNames <$> liftIO (readIORef $ hsc_NC session)
268− return NameCache
269− { nsUniqs = uniqSupply
270− , nsNames = extendOrigNameCache' onc tms pkgs
271− }
272−
273−-- | Extend the name cache with the names from the typechecked home modules and the loaded packages.
274−-- If we have two environments containing the same module we take the later one. We do this because
275−-- the name cache comes prepopulated with modules from daml-prim and we overwrite those with our own
276−-- daml-prim package.
277−extendOrigNameCache' :: OrigNameCache -> [TcModuleResult] -> [LoadPackageResult] -> OrigNameCache
278−extendOrigNameCache' onc tms pkgs = foldl (plusModuleEnv_C (\_x y -> y)) onc modEnvs
279− where
280− modEnvs =
281− mkModuleEnv
282− [(ms_mod $ tcModSummary $ tmrModule tm, tmrOccEnvName tm) | tm <- tms] :
283− [lprModuleEnv lm | lm <- pkgs]
284−
285246newtype WriteInterface = WriteInterface Bool
286247
287248mkTcModuleResult
@@ -319,8 +280,8 @@ tcModSummary = pm_mod_summary . tm_parsed_module
319280
320281-- | Setup the environment that GHC needs according to our
321282-- best understanding (!)
322−setupEnv :: GhcMonad m => UniqSupply -> [TcModuleResult] -> [LoadPackageResult] -> m ()
323−setupEnv uniqSupply tms lps = do
283+setupEnv :: GhcMonad m => [TcModuleResult] -> m ()
284+setupEnv tms = do
324285 session <- getSession
325286
326287 let mss = map (pm_mod_summary . tm_parsed_module . tmrModule) tms
@@ -337,64 +298,9 @@ setupEnv uniqSupply tms lps = do
337298 foldl' (\fc (im, ifr) -> GHC.extendInstalledModuleEnv fc im ifr) fc
338299 $ zip ims ifrs
339300
340− when False $ do
341− -- construct a new NameCache
342− nc' <- mkNameCache uniqSupply tms lps
343− -- update the name cache
344− liftIO $ modifyIORef (hsc_NC session) $ const nc'
345− -- update the external package state
346− liftIO $ modifyIORef (hsc_EPS session) (updateEps lps)
347301 -- load dependent modules, which must be in topological order.
348302 mapM_ loadModuleHome tms
349303
350−-- | Update the external package state given the loaded package results.
351−updateEps :: [LoadPackageResult] -> ExternalPackageState -> ExternalPackageState
352−updateEps lps eps =
353− eps
354− { eps_inst_env = newInstEnv
355− , eps_PIT = newPIT
356− , eps_PTE = newPTE
357− , eps_rule_base = newRuleBase
358− , eps_complete_matches = newCompleteMatches
359− , eps_fam_inst_env = newFamInst
360− , eps_ann_env = newAnnEnv
361− , eps_mod_fam_inst_env = newModFamInstEnv
362− }
363− where
364− (newInstEnv, (newPIT, (newPTE, (newRuleBase, (newCompleteMatches, (newFamInst, (newAnnEnv, newModFamInstEnv))))))) =
365− foldl
366− (\(instEnv, (pit, (pte, (ruleBase, (completeMatches, (famInst, (annEnv, modFamInstEnv))))))) ->
367− (instEnv `extendInstEnvList0`) ***
368− (pit `plusModuleEnv`) ***
369− (pte `plusTypeEnv`) ***
370− (ruleBase `unionRuleBase`) ***
371− (completeMatches `extendCompleteMatchMap`) ***
372− (famInst `extendFamInstEnvList`) ***
373− (annEnv `plusAnnEnv`) *** (modFamInstEnv `plusModuleEnv`))
374− ( emptyInstEnv
375− , ( emptyPackageIfaceTable
376− , ( emptyTypeEnv
377− , ( emptyRuleBase
378− , (emptyUFM, (emptyFamInstEnv, (emptyAnnEnv, emptyModuleEnv)))))))
379− [ ( instEnvElts $ eps_inst_env e
380− , ( eps_PIT e
381− , ( eps_PTE e
382− , ( eps_rule_base e
383− , ( concat $ eltsUFM $ eps_complete_matches e
384− , ( famInstEnvElts $ eps_fam_inst_env e
385− , (eps_ann_env e, eps_mod_fam_inst_env e)))))))
386− | p <- lps
387− , let e = lprEps p
388− ]
389−
390− -- TODO (drsk): This is necessary because the EPS that we store include the results of
391− -- previously loaded packages and we end up adding instances several times to the environment.
392− -- It would be better to have pure delta stored in the LoadPackageResult, such that it
393− -- contains only identities/instances/names coming from that specific loaded package, but I
394− -- failed so far in computing the correct delta.
395− extendInstEnvList0 instEnv0 clsInsts =
396− extendInstEnvList emptyInstEnv $
397− nubOrdOn is_dfun_name $ instEnvElts instEnv0 ++ clsInsts
398304
399305-- | Load a module, quickly. Input doesn't need to be desugared.
400306-- A module must be loaded before dependent modules can be typechecked.
src/Development/IDE/State/RuleTypes.hs−8
@@ -51,9 +51,6 @@ type instance RuleResult GetDependencies = TransitiveDependencies
5151-- | The type checked version of this file, requires TypeCheck+
5252type instance RuleResult TypeCheck = TcModuleResult
5353
54−-- | The result of loading a module from a package.
55−type instance RuleResult LoadPackage = LoadPackageResult
56−
5754-- | Information about what spans occur where, requires TypeCheck
5855type instance RuleResult GetSpanInfo = [SpanInfo]
5956
@@ -111,11 +108,6 @@ data TypeCheck = TypeCheck
111108instance Hashable TypeCheck
112109instance NFData TypeCheck
113110
114−data LoadPackage = LoadPackage InstalledUnitId
115− deriving (Eq, Show, Typeable, Generic)
116−instance Hashable LoadPackage
117−instance NFData LoadPackage
118−
119111data GetSpanInfo = GetSpanInfo
120112 deriving (Eq, Show, Typeable, Generic)
121113instance Hashable GetSpanInfo
src/Development/IDE/State/Rules.hs+2−37
@@ -23,8 +23,6 @@ module Development.IDE.State.Rules(
2323 fileFromParsedModule
2424 ) where
2525
26−import Control.Concurrent.Extra
27−import Control.Exception (evaluate)
2826import Control.Monad.Except
2927import Control.Monad.Extra (whenJust)
3028import qualified Development.IDE.Functions.Compile as Compile
@@ -73,16 +71,6 @@ defineNoFile f = define $ \k file -> do
7371 fail $ "Rule " ++ show k ++ " should always be called with the empty string for a file"
7472
7573
76−-- | Return a distinct supply of uniques.
77−getUniqSupply :: Action UniqSupply
78−getUniqSupply =
79− getServiceEnv >>= liftIO . getUniqSupplyFrom
80−
81−getUniqSupplyFrom :: Env -> IO UniqSupply
82−getUniqSupplyFrom Env{..} =
83− modifyVar envUniqSupplyVar $ evaluate . splitUniqSupply
84−
85−
8674------------------------------------------------------------
8775-- Exposed API
8876
@@ -290,45 +278,23 @@ typeCheckRule =
290278 define $ \TypeCheck file -> do
291279 pm <- use_ GetParsedModule file
292280 deps <- use_ GetDependencies file
293− lps <- mapM (flip use_ "" . LoadPackage) (transitivePkgDeps deps)
294281 tms <- uses_ TypeCheck (transitiveModuleDeps deps)
295282 setPriority PriorityTypeCheck
296− us <- getUniqSupply
297283 packageState <- use_ GhcSession ""
298284 opt <- getOpts
299− liftIO $ Compile.typecheckModule opt pm packageState us tms lps pm
300−
301−
302−loadPackageRule :: Rules ()
303−loadPackageRule =
304− defineNoFile $ \(LoadPackage pkg) -> do
305− packageState <- use_ GhcSession ""
306− opt <- getOpts
307− pkgs <- liftIO $ Compile.computePackageDeps opt packageState pkg
308− case pkgs of
309− Left e -> do
310− reportSeriousErrorDie $ "LoadPackage " ++ show pkg ++ " computePackageDeps failed, " ++ show e
311− Right v -> do
312− lps <- mapM (flip use_ "" . LoadPackage) v
313− us <- getUniqSupply
314− res <- liftIO $ Compile.loadPackage opt packageState us lps pkg
315− case res of
316− Left e -> reportSeriousErrorDie $ "LoadPackage " ++ show pkg ++ " loadPackage failed, " ++ show e
317− Right v -> return v
285+ liftIO $ Compile.typecheckModule opt pm packageState tms pm
318286
319287
320288generateCoreRule :: Rules ()
321289generateCoreRule =
322290 define $ \GenerateCore file -> do
323291 deps <- use_ GetDependencies file
324− lps <- mapM (flip use_ "" . LoadPackage) (transitivePkgDeps deps)
325292 (tm:tms) <- uses_ TypeCheck (file:transitiveModuleDeps deps)
326293 let pm = tm_parsed_module . Compile.tmrModule $ tm
327294 setPriority PriorityGenerateDalf
328− us <- getUniqSupply
329295 packageState <- use_ GhcSession ""
330296 opt <- getOpts
331− liftIO $ Compile.compileModule opt pm packageState us tms lps tm
297+ liftIO $ Compile.compileModule opt pm packageState tms tm
332298
333299loadGhcSession :: Rules ()
334300loadGhcSession =
@@ -359,7 +325,6 @@ mainRule = do
359325 getSpanInfoRule
360326 generateCoreRule
361327 loadGhcSession
362− loadPackageRule
363328 getHieFileRule
364329
365330------------------------------------------------------------