[project @ 1998-02-02 14:25:33 by simonm]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index b695f4c..9bc8766 100644 (file)
@@ -4,8 +4,6 @@
 \section[CmdLineOpts]{Things to do with command-line options}
 
 \begin{code}
-#include "HsVersions.h"
-
 module CmdLineOpts (
        CoreToDo(..),
        SimplifierSwitch(..),
@@ -17,7 +15,6 @@ module CmdLineOpts (
        switchIsOn,
 
        maybe_CompilingGhcInternals,
-       opt_AllDemanded,
        opt_AllStrict,
        opt_AutoSccsOnAllToplevs,
        opt_AutoSccsOnExportedToplevs,
@@ -25,7 +22,6 @@ module CmdLineOpts (
        opt_CompilingGhcInternals,
        opt_D_dump_absC,
        opt_D_dump_asm,
-       opt_D_dump_deforest,
        opt_D_dump_deriv,
        opt_D_dump_ds,
        opt_D_dump_flatC,
@@ -46,31 +42,28 @@ module CmdLineOpts (
        opt_D_verbose_core2core,
        opt_D_verbose_stg2stg,
        opt_DoCoreLinting,
+       opt_DoStgLinting,
        opt_DoSemiTagging,
        opt_DoEtaReduction,
        opt_DoTickyProfiling,
        opt_EnsureSplittableC,
        opt_FoldrBuildOn,
-       opt_FoldrBuildTrace,
        opt_ForConcurrent,
        opt_GlasgowExts,
        opt_GranMacros,
-       opt_Haskell_1_3,
        opt_HiMap,
-       opt_HiSuffix,
        opt_IgnoreIfacePragmas,
-       opt_IgnoreStrictnessPragmas,
-       opt_IrrefutableEverything,
        opt_IrrefutableTuples,
        opt_LiberateCaseThreshold,
+       opt_MultiParamClasses,
        opt_NoImplicitPrelude,
        opt_NumbersStrict,
        opt_OmitBlackHoling,
-       opt_OmitDefaultInstanceMethods,
        opt_OmitInterfacePragmas,
        opt_PprStyle_All,
        opt_PprStyle_Debug,
-       opt_PprStyle_User,
+       opt_PprStyle_User,              -- ToDo: rm
+       opt_PprUserLength,
        opt_ProduceC,
        opt_ProduceHi,
        opt_ProduceS,
@@ -79,7 +72,6 @@ module CmdLineOpts (
        opt_SccGroup,
        opt_SccProfilingOn,
        opt_ShowImportSpecs,
-       opt_ShowPragmaNameErrs,
        opt_SigsRequired,
        opt_SourceUnchanged,
        opt_SpecialiseAll,
@@ -93,17 +85,28 @@ module CmdLineOpts (
        opt_UnfoldingCreationThreshold,
        opt_UnfoldingConDiscount,
        opt_UnfoldingUseThreshold,
+       opt_UnfoldingKeenessFactor,
 
        opt_Verbose,
-       opt_WarnNameShadowing
+       opt_WarnNameShadowing,
+       opt_WarnUnusedNames,
+       opt_WarnUnusedTopLevel,
+       opt_WarnUnusedImports,
+       opt_WarnIncompletePatterns,
+       opt_WarnOverlappingPatterns,
+       opt_WarnSimplePatterns,
+       opt_WarnMissingMethods,
+       opt_WarnDuplicateExports,
+       opt_PruneTyDecls, opt_PruneInstDecls,
+       opt_D_show_rn_stats
     ) where
 
-IMPORT_1_3(Array(array, (//)))
-import PreludeGlaST    -- bad bad bad boy, Will (_Array internals)
-import Argv
-
-CHK_Ubiq() -- debugging consistency check
+#include "HsVersions.h"
 
+import Array   ( array, (//) )
+import GlaExts
+import ArrBase
+import Argv
 import Constants       -- Default values for some flags
 
 import Maybes          ( assocMaybe, firstJust, maybeToBool )
@@ -155,7 +158,6 @@ data CoreToDo               -- These are diff core-to-core passes,
   | CoreDoStaticArgs
   | CoreDoStrictness
   | CoreDoSpecialising
-  | CoreDoDeforest
   | CoreDoFoldrBuildWorkerWrapper
   | CoreDoFoldrBuildWWAnal
 \end{code}
@@ -220,6 +222,10 @@ data SimplifierSwitch
                        -- (Sigh, what a HACK, Andy.  WDP 96/01)
 
   | SimplCaseMerge
+  | SimplCaseScrutinee -- This flag tells that the expression being simplified is
+                       -- the scrutinee of a case expression, so we should
+                       -- apply the scrutinee discount when considering inlinings.
+                       -- See SimplVar.lhs
 \end{code}
 
 %************************************************************************
@@ -229,10 +235,11 @@ data SimplifierSwitch
 %************************************************************************
 
 \begin{code}
-lookUp        :: FAST_STRING -> Bool
-lookup_int     :: String -> Maybe Int
-lookup_def_int :: String -> Int -> Int
-lookup_str     :: String -> Maybe 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 = maybeToBool (assoc_opts sw)
        
@@ -246,12 +253,15 @@ lookup_def_int sw def = case (lookup_str sw) of
                            Nothing -> def              -- Use default
                            Just xx -> read xx
 
+lookup_def_float sw def = case (lookup_str sw) of
+                           Nothing -> def              -- Use default
+                           Just xx -> read xx
+
 assoc_opts    = assocMaybe [ (a, True) | a <- argv ]
 unpacked_opts = map _UNPK_ argv
 \end{code}
 
 \begin{code}
-opt_AllDemanded                        = lookUp  SLIT("-fall-demanded")
 opt_AllStrict                  = lookUp  SLIT("-fall-strict")
 opt_AutoSccsOnAllToplevs       = lookUp  SLIT("-fauto-sccs-on-all-toplevs")
 opt_AutoSccsOnExportedToplevs  = lookUp  SLIT("-fauto-sccs-on-exported-toplevs")
@@ -260,7 +270,6 @@ opt_CompilingGhcInternals   = maybeToBool maybe_CompilingGhcInternals
 maybe_CompilingGhcInternals    = lookup_str "-fcompiling-ghc-internals="
 opt_D_dump_absC                        = lookUp  SLIT("-ddump-absC")
 opt_D_dump_asm                 = lookUp  SLIT("-ddump-asm")
-opt_D_dump_deforest            = lookUp  SLIT("-ddump-deforest")
 opt_D_dump_deriv               = lookUp  SLIT("-ddump-deriv")
 opt_D_dump_ds                  = lookUp  SLIT("-ddump-ds")
 opt_D_dump_flatC               = lookUp  SLIT("-ddump-flatC")
@@ -269,7 +278,7 @@ opt_D_dump_rdr                      = lookUp  SLIT("-ddump-rdr")
 opt_D_dump_realC               = lookUp  SLIT("-ddump-realC")
 opt_D_dump_rn                  = lookUp  SLIT("-ddump-rn")
 opt_D_dump_simpl               = lookUp  SLIT("-ddump-simpl")
-opt_D_dump_simpl_iterations    = lookUp  SLIT("-ddump-simpl_iterations")
+opt_D_dump_simpl_iterations    = lookUp  SLIT("-ddump-simpl-iterations")
 opt_D_dump_spec                        = lookUp  SLIT("-ddump-spec")
 opt_D_dump_stg                 = lookUp  SLIT("-ddump-stg")
 opt_D_dump_stranal             = lookUp  SLIT("-ddump-stranal")
@@ -281,37 +290,33 @@ opt_D_source_stats                = lookUp  SLIT("-dsource-stats")
 opt_D_verbose_core2core                = lookUp  SLIT("-dverbose-simpl")
 opt_D_verbose_stg2stg          = lookUp  SLIT("-dverbose-stg")
 opt_DoCoreLinting              = lookUp  SLIT("-dcore-lint")
+opt_DoStgLinting               = lookUp  SLIT("-dstg-lint")
 opt_DoSemiTagging              = lookUp  SLIT("-fsemi-tagging")
 opt_DoTickyProfiling           = lookUp  SLIT("-fticky-ticky")
 opt_DoEtaReduction             = lookUp  SLIT("-fdo-eta-reduction")
 opt_EnsureSplittableC          = lookUp  SLIT("-fglobalise-toplev-names")
 opt_FoldrBuildOn               = lookUp  SLIT("-ffoldr-build-on")
-opt_FoldrBuildTrace            = lookUp  SLIT("-ffoldr-build-trace")
 opt_ForConcurrent              = lookUp  SLIT("-fconcurrent")
 opt_GranMacros                 = lookUp  SLIT("-fgransim")
 opt_GlasgowExts                        = lookUp  SLIT("-fglasgow-exts")
-opt_Haskell_1_3                        = lookUp  SLIT("-fhaskell-1.3")
 opt_HiMap                      = lookup_str "-himap="  -- file saying where to look for .hi files
-opt_HiSuffix                   = lookup_str "-hisuf="
 opt_IgnoreIfacePragmas         = lookUp  SLIT("-fignore-interface-pragmas")
-opt_IgnoreStrictnessPragmas    = lookUp  SLIT("-fignore-strictness-pragmas")
-opt_IrrefutableEverything      = lookUp  SLIT("-firrefutable-everything")
 opt_IrrefutableTuples          = lookUp  SLIT("-firrefutable-tuples")
+opt_MultiParamClasses          = opt_GlasgowExts
 opt_NoImplicitPrelude          = lookUp  SLIT("-fno-implicit-prelude")
 opt_NumbersStrict              = lookUp  SLIT("-fnumbers-strict")
 opt_OmitBlackHoling            = lookUp  SLIT("-dno-black-holing")
-opt_OmitDefaultInstanceMethods = lookUp  SLIT("-fomit-default-instance-methods")
 opt_OmitInterfacePragmas       = lookUp  SLIT("-fomit-interface-pragmas")
 opt_PprStyle_All               = lookUp  SLIT("-dppr-all")
 opt_PprStyle_Debug             = lookUp  SLIT("-dppr-debug")
 opt_PprStyle_User              = lookUp  SLIT("-dppr-user")
+opt_PprUserLength              = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
 opt_ProduceC                   = lookup_str "-C="
 opt_ProduceS                   = lookup_str "-S="
 opt_ProduceHi                  = lookup_str "-hifile=" -- the one to produce this time 
 opt_ReportWhyUnfoldingsDisallowed= lookUp SLIT("-freport-disallowed-unfoldings")
 opt_SccProfilingOn             = lookUp  SLIT("-fscc-profiling")
 opt_ShowImportSpecs            = lookUp  SLIT("-fshow-import-specs")
-opt_ShowPragmaNameErrs         = lookUp  SLIT("-fshow-pragma-name-errs")
 opt_SigsRequired               = lookUp  SLIT("-fsignatures-required")
 opt_SourceUnchanged            = lookUp  SLIT("-fsource-unchanged")
 opt_SpecialiseAll              = lookUp  SLIT("-fspecialise-all")
@@ -330,9 +335,20 @@ opt_UnfoldingUseThreshold  = lookup_def_int "-funfolding-use-threshold"       uNFOLD
 opt_UnfoldingConDiscount       = lookup_def_int "-funfolding-con-discount"        uNFOLDING_CON_DISCOUNT_WEIGHT
                        
 opt_LiberateCaseThreshold      = lookup_def_int "-fliberate-case-threshold"       lIBERATE_CASE_THRESHOLD
+opt_UnfoldingKeenessFactor     = lookup_def_float "-funfolding-keeness-factor"    uNFOLDING_KEENESS_FACTOR
 opt_WarnNameShadowing          = lookUp  SLIT("-fwarn-name-shadowing")
+opt_WarnIncompletePatterns     = lookUp  SLIT("-fwarn-incomplete-patterns")
+opt_WarnOverlappingPatterns    = lookUp  SLIT("-fwarn-overlapping-patterns")
+opt_WarnSimplePatterns         = lookUp  SLIT("-fwarn-simple-patterns")
+opt_WarnUnusedNames            = lookUp  SLIT("-fwarn-unused-names")
+opt_WarnUnusedTopLevel         = lookUp  SLIT("-fwarn-unused-toplevel")
+opt_WarnUnusedImports          = lookUp  SLIT("-fwarn-unused-imports")
+opt_WarnMissingMethods         = lookUp  SLIT("-fwarn-missing-methods")
+opt_WarnDuplicateExports       = lookUp  SLIT("-fwarn-duplicate-exports")
+opt_PruneTyDecls               = not (lookUp SLIT("-fno-prune-tydecls"))
+opt_PruneInstDecls             = not (lookUp SLIT("-fno-prune-instdecls"))
+opt_D_show_rn_stats            = lookUp SLIT("-dshow-rn-stats")
 
--- opt_UnfoldingUseThreshold   = lookup_int "-funfolding-use-threshold"
 -- opt_UnfoldingOverrideThreshold      = lookup_int "-funfolding-override-threshold"
 \end{code}
 
@@ -371,7 +387,6 @@ classifyOpts = sep argv [] [] -- accumulators...
          "-fstatic-args"    -> CORE_TD(CoreDoStaticArgs)
          "-fstrictness"     -> CORE_TD(CoreDoStrictness)
          "-fspecialise"     -> CORE_TD(CoreDoSpecialising)
-         "-fdeforest"       -> CORE_TD(CoreDoDeforest)
          "-ffoldr-build-worker-wrapper"  -> CORE_TD(CoreDoFoldrBuildWorkerWrapper)
          "-ffoldr-build-ww-anal"  -> CORE_TD(CoreDoFoldrBuildWWAnal)
 
@@ -399,12 +414,12 @@ classifyOpts = sep argv [] [] -- accumulators...
       = panic "simpl_sep []"
 #endif
 
-       -- The SimplifierSwitches should be delimited by "(" and ")".
+       -- The SimplifierSwitches should be delimited by "[" and "]".
 
     simpl_sep (opt1:opts) simpl_sw core_td stg_td
       = case (_UNPK_ opt1) of
-         "(" -> simpl_sep opts simpl_sw core_td stg_td
-         ")" -> let
+         "[" -> simpl_sep opts simpl_sw core_td stg_td
+         "]" -> let
                    this_simpl = CoreDoSimplify (isAmongSimpl simpl_sw)
                 in
                 sep opts (this_simpl : core_td) stg_td
@@ -489,11 +504,13 @@ tagOf_SimplSwitch SimplNoLetFromApp               = ILIT(28)
 tagOf_SimplSwitch SimplNoLetFromStrictLet      = ILIT(29)
 tagOf_SimplSwitch SimplDontFoldBackAppend       = ILIT(30)
 tagOf_SimplSwitch SimplCaseMerge               = ILIT(31)
+tagOf_SimplSwitch SimplCaseScrutinee           = ILIT(32)
+
 -- If you add anything here, be sure to change lAST_SIMPL_SWITCH_TAG, too!
 
 tagOf_SimplSwitch _ = panic# "tagOf_SimplSwitch"
 
-lAST_SIMPL_SWITCH_TAG = IBOX(tagOf_SimplSwitch SimplCaseMerge)
+lAST_SIMPL_SWITCH_TAG = IBOX(tagOf_SimplSwitch SimplCaseScrutinee)
 \end{code}
 
 %************************************************************************
@@ -503,16 +520,10 @@ lAST_SIMPL_SWITCH_TAG = IBOX(tagOf_SimplSwitch SimplCaseMerge)
 %************************************************************************
 
 \begin{code}
-#if __GLASGOW_HASKELL__ >= 200
 # define ARRAY     Array
-# define LIFT      GHCbase.Lift
+# define LIFT      Lift
 # define SET_TO            =:
 (=:) a b = (a,b)
-#else
-# define ARRAY     _Array
-# define LIFT      _Lift
-# define SET_TO            :=
-#endif
 
 isAmongSimpl :: [SimplifierSwitch] -> SimplifierSwitch -> SwitchResult