@@ -768,6 +768,7 @@ getModIfaceFromDiskRule recorder = defineEarlyCutoff (cmapWithPrio LogShake reco
768
768
Just session -> do
769
769
linkableType <- getLinkableType f
770
770
ver <- use_ GetModificationTime f
771
+ se@ ShakeExtras {ideNc} <- getShakeExtras
771
772
let m_old = case old of
772
773
Shake. Succeeded (Just old_version) v -> Just (v, old_version)
773
774
Shake. Stale _ (Just old_version) v -> Just (v, old_version)
@@ -778,7 +779,7 @@ getModIfaceFromDiskRule recorder = defineEarlyCutoff (cmapWithPrio LogShake reco
778
779
, get_file_version = use GetModificationTime_ {missingFileDiagnostics = False }
779
780
, regenerate = regenerateHiFile session f ms
780
781
}
781
- r <- loadInterface (hscEnv session) ms linkableType recompInfo
782
+ r <- loadInterface se (hscEnv session) ms linkableType recompInfo
782
783
case r of
783
784
(diags, Nothing ) -> return (Nothing , (diags, Nothing ))
784
785
(diags, Just x) -> do
@@ -897,12 +898,13 @@ getModIfaceRule recorder = defineEarlyCutoff (cmapWithPrio LogShake recorder) $
897
898
linkableType <- getLinkableType f
898
899
hsc <- hscEnv <$> use_ GhcSessionDeps f
899
900
let compile = fmap ([] ,) $ use GenerateCore f
900
- (diags, ! hiFile) <- compileToObjCodeIfNeeded hsc linkableType compile tmr
901
+ se <- getShakeExtras
902
+ (diags, ! hiFile) <- compileToObjCodeIfNeeded se hsc linkableType compile tmr
901
903
let fp = hiFileFingerPrint <$> hiFile
902
904
hiDiags <- case hiFile of
903
905
Just hiFile
904
906
| OnDisk <- status
905
- , not (tmrDeferedError tmr) -> writeHiFileAction hsc hiFile
907
+ , not (tmrDeferedError tmr) -> liftIO $ writeHiFile se hsc hiFile
906
908
_ -> pure []
907
909
return (fp, (diags++ hiDiags, hiFile))
908
910
NotFOI -> do
@@ -961,8 +963,10 @@ regenerateHiFile sess f ms compNeeded = do
961
963
-- compile writes .o file
962
964
let compile = liftIO $ compileModule (RunSimplifier True ) hsc (pm_mod_summary pm) $ tmrTypechecked tmr
963
965
966
+ se <- getShakeExtras
967
+
964
968
-- Bang pattern is important to avoid leaking 'tmr'
965
- (diags'', ! res) <- compileToObjCodeIfNeeded hsc compNeeded compile tmr
969
+ (diags'', ! res) <- compileToObjCodeIfNeeded se hsc compNeeded compile tmr
966
970
967
971
-- Write hi file
968
972
hiDiags <- case res of
@@ -980,7 +984,7 @@ regenerateHiFile sess f ms compNeeded = do
980
984
-- We don't write the `.hi` file if there are defered errors, since we won't get
981
985
-- accurate diagnostics next time if we do
982
986
hiDiags <- if not $ tmrDeferedError tmr
983
- then writeHiFileAction hsc hiFile
987
+ then liftIO $ writeHiFile se hsc hiFile
984
988
else pure []
985
989
986
990
pure (hiDiags <> gDiags <> concat wDiags)
@@ -990,18 +994,18 @@ regenerateHiFile sess f ms compNeeded = do
990
994
991
995
992
996
-- | HscEnv should have deps included already
993
- compileToObjCodeIfNeeded :: HscEnv -> Maybe LinkableType -> Action (IdeResult ModGuts ) -> TcModuleResult -> Action (IdeResult HiFileResult )
994
- compileToObjCodeIfNeeded hsc Nothing _ tmr = do
997
+ compileToObjCodeIfNeeded :: ShakeExtras -> HscEnv -> Maybe LinkableType -> Action (IdeResult ModGuts ) -> TcModuleResult -> Action (IdeResult HiFileResult )
998
+ compileToObjCodeIfNeeded _ hsc Nothing _ tmr = do
995
999
incrementRebuildCount
996
1000
res <- liftIO $ mkHiFileResultNoCompile hsc tmr
997
1001
pure ([] , Just $! res)
998
- compileToObjCodeIfNeeded hsc (Just linkableType) getGuts tmr = do
1002
+ compileToObjCodeIfNeeded se hsc (Just linkableType) getGuts tmr = do
999
1003
incrementRebuildCount
1000
1004
(diags, mguts) <- getGuts
1001
1005
case mguts of
1002
1006
Nothing -> pure (diags, Nothing )
1003
1007
Just guts -> do
1004
- (diags', ! res) <- liftIO $ mkHiFileResultCompile hsc tmr guts linkableType
1008
+ (diags', ! res) <- liftIO $ mkHiFileResultCompile se hsc tmr guts linkableType
1005
1009
pure (diags++ diags', res)
1006
1010
1007
1011
getClientSettingsRule :: Recorder (WithPriority Log ) -> Rules ()
@@ -1039,6 +1043,9 @@ getLinkableType f = use_ NeedsCompilation f
1039
1043
1040
1044
-- needsCompilationRule :: Rules ()
1041
1045
needsCompilationRule :: NormalizedFilePath -> Action (IdeResultNoDiagnosticsEarlyCutoff (Maybe LinkableType ))
1046
+ needsCompilationRule file
1047
+ | " boot" `isSuffixOf` (fromNormalizedFilePath file) =
1048
+ pure (Just $ encodeLinkableType Nothing , Just Nothing )
1042
1049
needsCompilationRule file = do
1043
1050
graph <- useNoFile GetModuleGraph
1044
1051
res <- case graph of
@@ -1097,15 +1104,6 @@ computeLinkableTypeForDynFlags d
1097
1104
newtype CompiledLinkables = CompiledLinkables { getCompiledLinkables :: Var (ModuleEnv UTCTime ) }
1098
1105
instance IsIdeGlobal CompiledLinkables
1099
1106
1100
-
1101
- writeHiFileAction :: HscEnv -> HiFileResult -> Action [FileDiagnostic ]
1102
- writeHiFileAction hsc hiFile = do
1103
- extras <- getShakeExtras
1104
- let targetPath = Compat. ml_hi_file $ ms_location $ hirModSummary hiFile
1105
- liftIO $ do
1106
- atomically $ resetInterfaceStore extras $ toNormalizedFilePath' targetPath
1107
- writeHiFile hsc hiFile
1108
-
1109
1107
data RulesConfig = RulesConfig
1110
1108
{ -- | Disable import cycle checking for improved performance in large codebases
1111
1109
checkForImportCycles :: Bool
0 commit comments