DynFlag(..), -- needed non-abstractly by DriverFlags
DynFlags(..),
+ v_Static_hsc_opts,
+
intSwitchSet,
switchIsOn,
isStaticHscFlag,
-- other dynamic flags
dopt_CoreToDo,
dopt_StgToDo,
+ dopt_HscLang,
+ dopt_OutName,
-- profiling opts
opt_AutoSccsOnAllToplevs,
import Array ( array, (//) )
import GlaExts
-import Argv
+import IOExts ( IORef, readIORef )
import Constants -- Default values for some flags
import Util
import FastTypes
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
| HscAsm
| HscJava
- | HscInterpreter
- deriving Eq
+ | 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]