[project @ 2001-04-30 10:51:18 by simonpj]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index f3c271a..b0627c2 100644 (file)
@@ -28,6 +28,8 @@ module CmdLineOpts (
        opt_PprStyle_Debug,
 
        dopt,
+       dopt_set,
+       dopt_unset,
 
        -- other dynamic flags
        dopt_CoreToDo,
@@ -75,7 +77,6 @@ module CmdLineOpts (
        opt_SimplExcessPrecision,
 
        -- Unfolding control
-       opt_UF_HiFileThreshold,
        opt_UF_CreationThreshold,
        opt_UF_UseThreshold,
        opt_UF_FunAppDiscount,
@@ -185,6 +186,7 @@ data CoreToDo               -- These are diff core-to-core passes,
   | CoreDoStrictness
   | CoreDoWorkerWrapper
   | CoreDoSpecialising
+  | CoreDoSpecConstr
   | CoreDoUSPInf
   | CoreDoCPResult
   | CoreDoGlomBinds
@@ -274,6 +276,7 @@ data DynFlag
    | Opt_WarnUnusedImports
    | Opt_WarnUnusedMatches
    | Opt_WarnDeprecations
+   | Opt_WarnMisc
 
    -- language opts
    | Opt_AllowOverlappingInstances
@@ -289,6 +292,8 @@ data DynFlags = DynFlags {
   stgToDo              :: [StgToDo],
   hscLang              :: HscLang,
   hscOutName           :: String,      -- name of the output file
+  hscStubHOutName      :: String,      -- name of the .stub_h output file
+  hscStubCOutName      :: String,      -- name of the .stub_c output file
   verbosity            :: Int,         -- verbosity level
   cppFlag              :: Bool,        -- preprocess with cpp?
   stolen_x86_regs      :: Int,         
@@ -309,6 +314,7 @@ defaultDynFlags = DynFlags {
   coreToDo = [], stgToDo = [], 
   hscLang = HscC, 
   hscOutName = "", 
+  hscStubHOutName = "", hscStubCOutName = "",
   verbosity = 0, 
   cppFlag              = False,
   stolen_x86_regs      = 4,
@@ -344,10 +350,19 @@ dopt_StgToDo = stgToDo
 dopt_OutName :: DynFlags -> String
 dopt_OutName = hscOutName
 
+dopt_set :: DynFlags -> DynFlag -> DynFlags
+dopt_set dfs f = dfs{ flags = f : flags dfs }
+
+dopt_unset :: DynFlags -> DynFlag -> DynFlags
+dopt_unset dfs f = dfs{ flags = filter (/= f) (flags dfs) }
+
 data HscLang
   = HscC
   | HscAsm
   | HscJava
+#ifdef ILX
+  | HscILX
+#endif
   | HscInterpreted
     deriving (Eq, Show)
 
@@ -367,7 +382,8 @@ standardWarnings
        Opt_WarnOverlappingPatterns,
        Opt_WarnMissingFields,
        Opt_WarnMissingMethods,
-       Opt_WarnDuplicateExports
+       Opt_WarnDuplicateExports,
+       Opt_WarnMisc
       ]
 
 minusWOpts
@@ -478,14 +494,14 @@ opt_DoSemiTagging         = lookUp  SLIT("-fsemi-tagging")
 opt_FoldrBuildOn               = lookUp  SLIT("-ffoldr-build-on")
 opt_LiberateCaseThreshold      = lookup_def_int "-fliberate-case-threshold" (10::Int)
 opt_StgDoLetNoEscapes          = lookUp  SLIT("-flet-no-escape")
-opt_UnfoldCasms                        = lookUp SLIT("-funfold-casms-in-hi-file")
+opt_UnfoldCasms                        = lookUp  SLIT("-funfold-casms-in-hi-file")
 opt_UsageSPOn                  = lookUp  SLIT("-fusagesp-on")
 opt_UnboxStrictFields          = lookUp  SLIT("-funbox-strict-fields")
 
 {-
    The optional '-inpackage=P' flag tells what package
    we are compiling this module for.
-   The Prelude, for example is compiled with '-inpackage prelude'
+   The Prelude, for example is compiled with '-inpackage std'
 -}
 opt_InPackage                  = case lookup_str "-inpackage=" of
                                    Just p  -> _PK_ p
@@ -504,16 +520,15 @@ opt_OmitInterfacePragmas  = lookUp  SLIT("-fomit-interface-pragmas")
 opt_KeepStgTypes               = lookUp  SLIT("-fkeep-stg-types")
 
 -- Simplifier switches
-opt_SimplNoPreInlining         = lookUp SLIT("-fno-pre-inlining")
+opt_SimplNoPreInlining         = lookUp  SLIT("-fno-pre-inlining")
        -- NoPreInlining is there just to see how bad things
        -- get if you don't do it!
-opt_SimplDoEtaReduction                = lookUp SLIT("-fdo-eta-reduction")
-opt_SimplDoLambdaEtaExpansion  = lookUp SLIT("-fdo-lambda-eta-expansion")
-opt_SimplCaseMerge             = lookUp SLIT("-fcase-merge")
-opt_SimplExcessPrecision       = lookUp SLIT("-fexcess-precision")
+opt_SimplDoEtaReduction                = lookUp  SLIT("-fdo-eta-reduction")
+opt_SimplDoLambdaEtaExpansion  = lookUp  SLIT("-fdo-lambda-eta-expansion")
+opt_SimplCaseMerge             = lookUp  SLIT("-fcase-merge")
+opt_SimplExcessPrecision       = lookUp  SLIT("-fexcess-precision")
 
 -- Unfolding control
-opt_UF_HiFileThreshold         = lookup_def_int "-funfolding-interface-threshold" (45::Int)
 opt_UF_CreationThreshold       = lookup_def_int "-funfolding-creation-threshold"  (45::Int)
 opt_UF_UseThreshold            = lookup_def_int "-funfolding-use-threshold"       (8::Int)     -- Discounts can be big
 opt_UF_FunAppDiscount          = lookup_def_int "-funfolding-fun-discount"        (6::Int)     -- It's great to inline a fn
@@ -523,10 +538,10 @@ opt_UF_UpdateInPlace              = lookUp  SLIT("-funfolding-update-in-place")
 opt_UF_CheapOp  = ( 1 :: Int)  -- Only one instruction; and the args are charged for
 opt_UF_DearOp   = ( 4 :: Int)
                        
-opt_NoPruneDecls               = lookUp SLIT("-fno-prune-decls")
-opt_NoPruneTyDecls             = lookUp SLIT("-fno-prune-tydecls")
-opt_Static                     = lookUp SLIT("-static")
-opt_Unregisterised             = lookUp SLIT("-funregisterised")
+opt_NoPruneDecls               = lookUp  SLIT("-fno-prune-decls")
+opt_NoPruneTyDecls             = lookUp  SLIT("-fno-prune-tydecls")
+opt_Static                     = lookUp  SLIT("-static")
+opt_Unregisterised             = lookUp  SLIT("-funregisterised")
 \end{code}
 
 %************************************************************************
@@ -582,7 +597,6 @@ isStaticHscFlag f =
        "fcontext-stack",
        "fliberate-case-threshold",
        "fhistory-size",
-       "funfolding-interface-threshold",
        "funfolding-creation-threshold",
        "funfolding-use-threshold",
        "funfolding-fun-discount",