| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
GHC.Iface.Recomp
Description
Module for detecting if recompilation is required
Synopsis
- checkOldIface :: HscEnv -> ModSummary -> Maybe ModIface -> IO (MaybeValidated ModIface)
- data RecompileRequired
- needsRecompileBecause :: RecompReason -> RecompileRequired
- recompThen :: Monad m => m RecompileRequired -> m RecompileRequired -> m RecompileRequired
- data MaybeValidated a
- = UpToDateItem a
- | OutOfDateItem !CompileReason (Maybe a)
- outOfDateItemBecause :: RecompReason -> Maybe a -> MaybeValidated a
- data RecompReason
- = UnitDepRemoved (ImportLevel, UnitId)
- | ModulePackageChanged FastString
- | SourceFileChanged
- | NoSelfRecompInfo
- | ThisUnitIdChanged
- | ImpurePlugin
- | PluginsChanged
- | PluginFingerprintChanged
- | ModuleInstChanged
- | HieMissing
- | HieOutdated
- | SigsMergeChanged
- | ModuleChanged ModuleName
- | ModuleRemoved (ImportLevel, UnitId, ModuleName)
- | ModuleAdded (ImportLevel, UnitId, ModuleName)
- | ModuleChangedRaw ModuleName
- | ModuleChangedIface ModuleName
- | FileChanged FilePath
- | CustomReason String
- | FlagsChanged
- | LinkFlagsChanged
- | OptimFlagsChanged
- | HpcFlagsChanged
- | MissingBytecode
- | MissingObjectFile
- | MissingDynObjectFile
- | MissingDynHiFile
- | MismatchedDynHiFile
- | ObjectsChanged
- | LibraryChanged
- | THWithJS
- data CompileReason
- recompileRequired :: RecompileRequired -> Bool
- addFingerprints :: HscEnv -> PartialModIface -> IO ModIface
- mkSelfRecomp :: HscEnv -> Module -> Fingerprint -> [Usage] -> IO IfaceSelfRecomp
Documentation
checkOldIface :: HscEnv -> ModSummary -> Maybe ModIface -> IO (MaybeValidated ModIface) #
Top level function to check if the version of an old interface file is equivalent to the current source file the user asked us to compile. If the same, we can avoid recompilation.
We return on the outside whether the interface file is up to date, providing
evidence that is with a ModIface. In the case that it isn't, we may also
return a found or provided ModIface. Why we don't always return the old
one, if it exists, is unclear to me, except that I tried it and some tests
failed (see #18205).
data RecompileRequired #
Constructors
| UpToDate | everything is up to date, recompilation is not required |
| NeedsRecompile !CompileReason | Need to compile the module |
Instances
| Outputable RecompileRequired # | |
Defined in GHC.Iface.Recomp Methods ppr :: RecompileRequired -> SDoc # | |
| Monoid RecompileRequired # | |
Defined in GHC.Iface.Recomp Methods mempty :: RecompileRequired Source # mappend :: RecompileRequired -> RecompileRequired -> RecompileRequired Source # mconcat :: [RecompileRequired] -> RecompileRequired Source # | |
| Semigroup RecompileRequired # | |
Defined in GHC.Iface.Recomp Methods (<>) :: RecompileRequired -> RecompileRequired -> RecompileRequired Source # sconcat :: NonEmpty RecompileRequired -> RecompileRequired Source # stimes :: Integral b => b -> RecompileRequired -> RecompileRequired Source # | |
| Eq RecompileRequired # | |
Defined in GHC.Iface.Recomp Methods (==) :: RecompileRequired -> RecompileRequired -> Bool Source # (/=) :: RecompileRequired -> RecompileRequired -> Bool Source # | |
recompThen :: Monad m => m RecompileRequired -> m RecompileRequired -> m RecompileRequired #
data MaybeValidated a #
Constructors
| UpToDateItem a | The item contained is validated to be up to date |
| OutOfDateItem | The item is are absent altogether or out of date, for the reason given. |
Fields
| |
Instances
| Functor MaybeValidated # | |
Defined in GHC.Iface.Recomp Methods fmap :: (a -> b) -> MaybeValidated a -> MaybeValidated b Source # (<$) :: a -> MaybeValidated b -> MaybeValidated a Source # | |
| Outputable a => Outputable (MaybeValidated a) # | |
Defined in GHC.Iface.Recomp Methods ppr :: MaybeValidated a -> SDoc # | |
outOfDateItemBecause :: RecompReason -> Maybe a -> MaybeValidated a #
data RecompReason #
Constructors
Instances
| Outputable RecompReason # | |
Defined in GHC.Iface.Recomp Methods ppr :: RecompReason -> SDoc # | |
| Eq RecompReason # | |
Defined in GHC.Iface.Recomp Methods (==) :: RecompReason -> RecompReason -> Bool Source # (/=) :: RecompReason -> RecompReason -> Bool Source # | |
data CompileReason #
Constructors
| MustCompile | The .hs file has been touched, or the .o/.hi file does not exist |
| RecompBecause !RecompReason | The .o/.hi files are up to date, but something else has changed to force recompilation; the String says what (one-line summary) |
Instances
| Outputable CompileReason # | |
Defined in GHC.Iface.Recomp Methods ppr :: CompileReason -> SDoc # | |
| Eq CompileReason # | |
Defined in GHC.Iface.Recomp Methods (==) :: CompileReason -> CompileReason -> Bool Source # (/=) :: CompileReason -> CompileReason -> Bool Source # | |
addFingerprints :: HscEnv -> PartialModIface -> IO ModIface #
Add fingerprints for top-level declarations to a ModIface.
See Note [Fingerprinting IfaceDecls]
mkSelfRecomp :: HscEnv -> Module -> Fingerprint -> [Usage] -> IO IfaceSelfRecomp #
Compute the information needed for self-recompilation checking. This information can be computed before the backend phase.