diff options
Diffstat (limited to 'compiler/GHC/Iface/Recomp.hs')
-rw-r--r-- | compiler/GHC/Iface/Recomp.hs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs index 68ca5bfdbe..7759aea72d 100644 --- a/compiler/GHC/Iface/Recomp.hs +++ b/compiler/GHC/Iface/Recomp.hs @@ -271,7 +271,7 @@ checkVersions hsc_env mod_summary iface when (isOneShot (ghcMode (hsc_dflags hsc_env))) $ do { ; updateEps_ $ \eps -> eps { eps_is_boot = mkModDeps $ (dep_boot_mods (mi_deps iface)) } } - ; recomp <- checkList [checkModUsage (homeUnitAsUnit home_unit) u + ; recomp <- checkList [checkModUsage (hsc_FC hsc_env) (homeUnitAsUnit home_unit) u | u <- mi_usages iface] ; return (recomp, Just iface) }}}}}}}}}}} @@ -550,8 +550,8 @@ getFromModIface doc_msg mod getter -- | Given the usage information extracted from the old -- M.hi file for the module being compiled, figure out -- whether M needs to be recompiled. -checkModUsage :: Unit -> Usage -> IfG RecompileRequired -checkModUsage _this_pkg UsagePackageModule{ +checkModUsage :: FinderCache -> Unit -> Usage -> IfG RecompileRequired +checkModUsage _ _this_pkg UsagePackageModule{ usg_mod = mod, usg_mod_hash = old_mod_hash } = do logger <- getLogger @@ -563,19 +563,19 @@ checkModUsage _this_pkg UsagePackageModule{ -- recompile. This is safe but may entail more recompilation when -- a dependent package has changed. -checkModUsage _ UsageMergedRequirement{ usg_mod = mod, usg_mod_hash = old_mod_hash } = do +checkModUsage _ _ UsageMergedRequirement{ usg_mod = mod, usg_mod_hash = old_mod_hash } = do logger <- getLogger needInterface mod $ \iface -> do let reason = moduleNameString (moduleName mod) ++ " changed (raw)" checkModuleFingerprint logger reason old_mod_hash (mi_mod_hash (mi_final_exts iface)) -checkModUsage this_pkg UsageHomeModuleInterface{ usg_mod_name = mod_name, usg_iface_hash = old_mod_hash } = do +checkModUsage _ this_pkg UsageHomeModuleInterface{ usg_mod_name = mod_name, usg_iface_hash = old_mod_hash } = do let mod = mkModule this_pkg mod_name logger <- getLogger needInterface mod $ \iface -> do let reason = moduleNameString (moduleName mod) ++ " changed (interface)" checkIfaceFingerprint logger reason old_mod_hash (mi_iface_hash (mi_final_exts iface)) -checkModUsage this_pkg UsageHomeModule{ +checkModUsage _ this_pkg UsageHomeModule{ usg_mod_name = mod_name, usg_mod_hash = old_mod_hash, usg_exports = maybe_old_export_hash, @@ -602,19 +602,18 @@ checkModUsage this_pkg UsageHomeModule{ (text " Export list changed") $ do -- CHECK ITEMS ONE BY ONE - recompile <- checkList [ checkEntityUsage logger reason new_decl_hash u - | u <- old_decl_hash] + !recompile <- checkList [ checkEntityUsage logger reason new_decl_hash u + | u <- old_decl_hash] if recompileRequired recompile then return recompile -- This one failed, so just bail out now else up_to_date logger (text " Great! The bits I use are up to date") - -checkModUsage _this_pkg UsageFile{ usg_file_path = file, +checkModUsage fc _this_pkg UsageFile{ usg_file_path = file, usg_file_hash = old_hash, usg_file_label = mlabel } = liftIO $ handleIO handler $ do - new_hash <- getFileHash file + new_hash <- lookupFileCache fc file if (old_hash /= new_hash) then return recomp else return UpToDate |