diff options
author | Norman Ramsey <nr@cs.tufts.edu> | 2022-02-07 10:42:36 -0500 |
---|---|---|
committer | Cheng Shao <astrohavoc@gmail.com> | 2022-05-21 03:11:04 +0000 |
commit | 4aa3c5bde8c54f6ab8cbb2a574f7654590c077ca (patch) | |
tree | 43e79b6f797f12a3eb040252a20ac80659c55514 /ghc | |
parent | 36b8a57cb30c1374cce749b6f1554a2d438336b9 (diff) | |
download | haskell-4aa3c5bde8c54f6ab8cbb2a574f7654590c077ca.tar.gz |
Change `Backend` type and remove direct dependencieswip/backend-as-record
With this change, `Backend` becomes an abstract type
(there are no more exposed value constructors).
Decisions that were formerly made by asking "is the
current back end equal to (or different from) this named value
constructor?" are now made by interrogating the back end about
its properties, which are functions exported by `GHC.Driver.Backend`.
There is a description of how to migrate code using `Backend` in the
user guide.
Clients using the GHC API can find a backdoor to access the Backend
datatype in GHC.Driver.Backend.Internal.
Bumps haddock submodule.
Fixes #20927
Diffstat (limited to 'ghc')
-rw-r--r-- | ghc/Main.hs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/ghc/Main.hs b/ghc/Main.hs index 8e30d1a765..45dd5fede1 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -16,9 +16,10 @@ module Main (main) where -- The official GHC API import qualified GHC -import GHC (parseTargetFiles, Ghc, GhcMonad(..), Backend (..), +import GHC (parseTargetFiles, Ghc, GhcMonad(..), LoadHowMuch(..) ) +import GHC.Driver.Backend import GHC.Driver.CmdLine import GHC.Driver.Env import GHC.Driver.Errors @@ -175,9 +176,9 @@ main' postLoadMode units dflags0 args flagWarnings = do let dflt_backend = backend dflags0 (mode, bcknd, link) = case postLoadMode of - DoInteractive -> (CompManager, Interpreter, LinkInMemory) - DoEval _ -> (CompManager, Interpreter, LinkInMemory) - DoRun -> (CompManager, Interpreter, LinkInMemory) + DoInteractive -> (CompManager, interpreterBackend, LinkInMemory) + DoEval _ -> (CompManager, interpreterBackend, LinkInMemory) + DoRun -> (CompManager, interpreterBackend, LinkInMemory) DoMake -> (CompManager, dflt_backend, LinkBinary) DoBackpack -> (CompManager, dflt_backend, LinkBinary) DoMkDependHS -> (MkDepend, dflt_backend, LinkBinary) @@ -217,8 +218,9 @@ main' postLoadMode units dflags0 args flagWarnings = do (dflags3, fileish_args, dynamicFlagWarnings) <- GHC.parseDynamicFlags logger2 dflags2 args' - let dflags4 = case bcknd of - Interpreter | not (gopt Opt_ExternalInterpreter dflags3) -> + let dflags4 = if backendNeedsFullWays bcknd && + not (gopt Opt_ExternalInterpreter dflags3) + then let platform = targetPlatform dflags3 dflags3a = dflags3 { targetWays_ = hostFullWays } dflags3b = foldl gopt_set dflags3a @@ -228,7 +230,7 @@ main' postLoadMode units dflags0 args flagWarnings = do $ concatMap (wayUnsetGeneralFlags platform) hostFullWays in dflags3c - _ -> + else dflags3 let logger4 = setLogFlags logger2 (initLogFlags dflags4) @@ -364,7 +366,7 @@ checkOptions mode dflags srcs objs units = do else do case mode of - StopBefore StopC | backend dflags /= ViaC + StopBefore StopC | not (backendGeneratesHc (backend dflags)) -> throwGhcException $ UsageError $ "the option -C is only available with an unregisterised GHC" StopBefore StopAs | ghcLink dflags == NoLink |