X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FCmdLineOpts.lhs;h=d254ab1e5072e0a27a2a4a41bd14d546b4818b83;hb=2ecf1c9f639dc75f1078e88c2e551116923f742a;hp=348831a1553dc02ada03a6b3f2eb4aef5e25e6d9;hpb=f98aaf1088d0b654ebf6c887c7dbebe5bb6f5f5f;p=ghc-hetmet.git diff --git a/ghc/compiler/main/CmdLineOpts.lhs b/ghc/compiler/main/CmdLineOpts.lhs index 348831a..d254ab1 100644 --- a/ghc/compiler/main/CmdLineOpts.lhs +++ b/ghc/compiler/main/CmdLineOpts.lhs @@ -14,6 +14,8 @@ module CmdLineOpts ( DynFlag(..), -- needed non-abstractly by DriverFlags DynFlags(..), + v_Static_hsc_opts, + intSwitchSet, switchIsOn, isStaticHscFlag, @@ -97,7 +99,7 @@ module CmdLineOpts ( import Array ( array, (//) ) import GlaExts -import Argv +import IOExts ( IORef, readIORef ) import Constants -- Default values for some flags import Util import FastTypes @@ -277,8 +279,8 @@ data DynFlag deriving (Eq) data DynFlags = DynFlags { - coreToDo :: CoreToDo, - stgToDo :: StgToDo, + coreToDo :: [CoreToDo], + stgToDo :: [StgToDo], hscLang :: HscLang, hscOutName :: String, -- name of the file in which to place output flags :: [DynFlag] @@ -287,10 +289,10 @@ data DynFlags = DynFlags { 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 @@ -300,7 +302,8 @@ data HscLang = HscC | HscAsm | HscJava - | HscInterpreter + | HscInterpreted + deriving Eq dopt_HscLang :: DynFlags -> HscLang dopt_HscLang = hscLang @@ -313,15 +316,22 @@ 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 @@ -339,7 +349,6 @@ lookup_def_float sw def = case (lookup_str sw) of Nothing -> def -- Use default Just xx -> read xx -unpacked_opts = map _UNPK_ argv {- Putting the compiler options into temporary at-files @@ -351,7 +360,7 @@ unpacked_opts :: [String] 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]