SwitchResult(..),
HscLang(..),
DynFlag(..), -- needed non-abstractly by DriverFlags
- DynFlags, -- abstract
+ DynFlags(..),
+
+ v_Static_hsc_opts,
intSwitchSet,
switchIsOn,
dopt_CoreToDo,
dopt_StgToDo,
dopt_HscLang,
+ dopt_OutName,
-- profiling opts
opt_AutoSccsOnAllToplevs,
opt_IgnoreAsserts,
opt_IgnoreIfacePragmas,
opt_NoHiCheck,
- opt_NoImplicitPrelude,
opt_OmitBlackHoling,
opt_OmitInterfacePragmas,
opt_NoPruneTyDecls,
import Array ( array, (//) )
import GlaExts
-import Argv
+import IOExts ( IORef, readIORef )
import Constants -- Default values for some flags
import Util
import FastTypes
| Opt_AllowUndecidableInstances
| Opt_GlasgowExts
| Opt_Generics
+ | Opt_NoImplicitPrelude
-- misc
| Opt_ReportCompile
deriving (Eq)
data DynFlags = DynFlags {
- coreToDo :: CoreToDo,
- stgToDo :: StgToDo,
- hscLang :: HscLang,
- flags :: [DynFlag]
+ coreToDo :: [CoreToDo],
+ stgToDo :: [StgToDo],
+ hscLang :: HscLang,
+ hscOutName :: String, -- name of the file in which to place output
+ flags :: [DynFlag]
}
dopt :: DynFlag -> DynFlags -> Bool
dopt f dflags = f `elem` (flags dflags)
-dopt_CoreToDo :: DynFlags -> CoreToDo
+dopt_CoreToDo :: DynFlags -> [CoreToDo]
dopt_CoreToDo = coreToDo
-dopt_StgToDo :: DynFlags -> StgToDo
+dopt_StgToDo :: DynFlags -> [StgToDo]
dopt_StgToDo = stgToDo
+dopt_OutName :: DynFlags -> String
+dopt_OutName = hscOutName
+
data HscLang
- = HscC String -- String is the filename to put output into
- | HscAsm String -- ditto
- | HscJava String -- ditto
- | HscInterpreter
+ = HscC
+ | HscAsm
+ | HscJava
+ | HscInterpreted
+ deriving Eq
dopt_HscLang :: DynFlags -> HscLang
dopt_HscLang = hscLang
%************************************************************************
\begin{code}
+-- v_Statis_hsc_opts is here to avoid a circular dependency with
+-- main/DriverState.
+GLOBAL_VAR(v_Static_hsc_opts, [], [String])
+
lookUp :: FAST_STRING -> Bool
lookup_int :: String -> Maybe Int
lookup_def_int :: String -> Int -> Int
lookup_def_float :: String -> Float -> Float
lookup_str :: String -> Maybe String
-lookUp sw = sw `elem` argv
+unpacked_static_opts = unsafePerformIO (readIORef v_Static_hsc_opts)
+packed_static_opts = map _PK_ unpacked_static_opts
+
+lookUp sw = sw `elem` packed_static_opts
-lookup_str sw = firstJust (map (startsWith sw) unpacked_opts)
+lookup_str sw = firstJust (map (startsWith sw) unpacked_static_opts)
lookup_int sw = case (lookup_str sw) of
Nothing -> Nothing
Nothing -> def -- Use default
Just xx -> read xx
-unpacked_opts = map _UNPK_ argv
{-
Putting the compiler options into temporary at-files
unpacked_opts =
concat $
map (expandAts) $
- map _UNPK_ argv
+ map _UNPK_ argv -- NOT ARGV any more: v_Static_hsc_opts
where
expandAts ('@':fname) = words (unsafePerformIO (readFile fname))
expandAts l = [l]
opt_IgnoreAsserts = lookUp SLIT("-fignore-asserts")
opt_IgnoreIfacePragmas = lookUp SLIT("-fignore-interface-pragmas")
opt_NoHiCheck = lookUp SLIT("-fno-hi-version-check")
-opt_NoImplicitPrelude = lookUp SLIT("-fno-implicit-prelude")
opt_OmitBlackHoling = lookUp SLIT("-dno-black-holing")
opt_OmitInterfacePragmas = lookUp SLIT("-fomit-interface-pragmas")
\begin{code}
isStaticHscFlag f =
f `elem` [
- "-fauto-sccs-on-all-toplevs",
- "-fauto-sccs-on-exported-toplevs",
- "-fauto-sccs-on-individual-cafs",
- "-fauto-sccs-on-dicts",
- "-fscc-profiling",
- "-fticky-ticky",
- "-fall-strict",
- "-fdicts-strict",
- "-fgenerics",
- "-firrefutable-tuples",
- "-fnumbers-strict",
- "-fparallel",
- "-fsmp",
- "-fsemi-tagging",
- "-ffoldr-build-on",
- "-flet-no-escape",
- "-funfold-casms-in-hi-file",
- "-fusagesp-on",
- "-funbox-strict-fields",
- "-femit-extern-decls",
- "-fglobalise-toplev-names",
- "-fgransim",
- "-fignore-asserts",
- "-fignore-interface-pragmas",
- "-fno-hi-version-check",
- "-fno-implicit-prelude",
- "-dno-black-holing",
- "-fomit-interface-pragmas",
- "-fno-pre-inlining",
- "-fdo-eta-reduction",
- "-fdo-lambda-eta-expansion",
- "-fcase-of-case",
- "-fcase-merge",
- "-fpedantic-bottoms",
- "-fexcess-precision",
- "-funfolding-update-in-place",
- "-freport-compile",
- "-fno-prune-decls",
- "-fno-prune-tydecls",
- "-static",
- "-funregisterised",
- "-v" ]
+ "fauto-sccs-on-all-toplevs",
+ "fauto-sccs-on-exported-toplevs",
+ "fauto-sccs-on-individual-cafs",
+ "fauto-sccs-on-dicts",
+ "fscc-profiling",
+ "fticky-ticky",
+ "fall-strict",
+ "fdicts-strict",
+ "firrefutable-tuples",
+ "fnumbers-strict",
+ "fparallel",
+ "fsmp",
+ "fsemi-tagging",
+ "ffoldr-build-on",
+ "flet-no-escape",
+ "funfold-casms-in-hi-file",
+ "fusagesp-on",
+ "funbox-strict-fields",
+ "femit-extern-decls",
+ "fglobalise-toplev-names",
+ "fgransim",
+ "fignore-asserts",
+ "fignore-interface-pragmas",
+ "fno-hi-version-check",
+ "fno-implicit-prelude",
+ "dno-black-holing",
+ "fomit-interface-pragmas",
+ "fno-pre-inlining",
+ "fdo-eta-reduction",
+ "fdo-lambda-eta-expansion",
+ "fcase-of-case",
+ "fcase-merge",
+ "fpedantic-bottoms",
+ "fexcess-precision",
+ "funfolding-update-in-place",
+ "freport-compile",
+ "fno-prune-decls",
+ "fno-prune-tydecls",
+ "static",
+ "funregisterised",
+ "v" ]
|| any (flip prefixMatch f) [
- "-fcontext-stack",
- "-fliberate-case-threshold",
- "-fhi-version=",
- "-fhistory-size",
- "-funfolding-interface-threshold",
- "-funfolding-creation-threshold",
- "-funfolding-use-threshold",
- "-funfolding-fun-discount",
- "-funfolding-keeness-factor"
+ "fcontext-stack",
+ "fliberate-case-threshold",
+ "fhi-version=",
+ "fhistory-size",
+ "funfolding-interface-threshold",
+ "funfolding-creation-threshold",
+ "funfolding-use-threshold",
+ "funfolding-fun-discount",
+ "funfolding-keeness-factor"
]
\end{code}