-%
+
% (c) The University of Glasgow, 1996-2000
%
\section[CmdLineOpts]{Things to do with command-line options}
opt_PprStyle_Debug,
dopt,
+ dopt_set,
+ dopt_unset,
-- other dynamic flags
dopt_CoreToDo,
dopt_HscLang,
dopt_OutName,
+ -- sets of warning opts
+ standardWarnings,
+ minusWOpts,
+ minusWallOpts,
+
-- profiling opts
opt_AutoSccsOnAllToplevs,
opt_AutoSccsOnExportedToplevs,
opt_NumbersStrict,
opt_Parallel,
opt_SMP,
+ opt_NoMonomorphismRestriction,
+ opt_KeepStgTypes,
-- optimisation opts
+ opt_NoMethodSharing,
opt_DoSemiTagging,
opt_FoldrBuildOn,
opt_LiberateCaseThreshold,
opt_SimplNoPreInlining,
opt_SimplDoEtaReduction,
opt_SimplDoLambdaEtaExpansion,
- opt_SimplCaseOfCase,
opt_SimplCaseMerge,
- opt_SimplPedanticBottoms,
opt_SimplExcessPrecision,
-- Unfolding control
- opt_UF_HiFileThreshold,
opt_UF_CreationThreshold,
opt_UF_UseThreshold,
opt_UF_FunAppDiscount,
| CoreDoStrictness
| CoreDoWorkerWrapper
| CoreDoSpecialising
+ | CoreDoSpecConstr
| CoreDoUSPInf
| CoreDoCPResult
| CoreDoGlomBinds
| Opt_D_dump_rn_stats
| Opt_D_dump_stix
| Opt_D_dump_simpl_stats
- | Opt_D_dump_InterpSyn
+ | Opt_D_dump_tc_trace
+ | Opt_D_dump_BCOs
| Opt_D_source_stats
| Opt_D_verbose_core2core
| Opt_D_verbose_stg2stg
| Opt_WarnUnusedImports
| Opt_WarnUnusedMatches
| Opt_WarnDeprecations
+ | Opt_WarnMisc
-- language opts
| Opt_AllowOverlappingInstances
| Opt_Generics
| Opt_NoImplicitPrelude
- -- misc
- | Opt_ReportCompile
deriving (Eq)
data DynFlags = DynFlags {
- coreToDo :: [CoreToDo],
- stgToDo :: [StgToDo],
- hscLang :: HscLang,
- hscOutName :: String, -- name of the file in which to place output
- verbosity :: Int, -- verbosity level
- flags :: [DynFlag]
+ coreToDo :: [CoreToDo],
+ 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,
+ cmdlineHcIncludes :: [String], -- -#includes
+
+ -- options for particular phases
+ opt_L :: [String],
+ opt_P :: [String],
+ opt_c :: [String],
+ opt_a :: [String],
+ opt_m :: [String],
+
+ -- hsc dynamic flags
+ flags :: [DynFlag]
}
defaultDynFlags = DynFlags {
coreToDo = [], stgToDo = [],
- hscLang = HscC, hscOutName = "",
- verbosity = 0, flags = []
+ hscLang = HscC,
+ hscOutName = "",
+ hscStubHOutName = "", hscStubCOutName = "",
+ verbosity = 0,
+ cppFlag = False,
+ stolen_x86_regs = 4,
+ cmdlineHcIncludes = [],
+ opt_L = [],
+ opt_P = [],
+ opt_c = [],
+ opt_a = [],
+ opt_m = [],
+ flags = standardWarnings,
}
{-
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)
%************************************************************************
%* *
+\subsection{Warnings}
+%* *
+%************************************************************************
+
+\begin{code}
+standardWarnings
+ = [ Opt_WarnDeprecations,
+ Opt_WarnOverlappingPatterns,
+ Opt_WarnMissingFields,
+ Opt_WarnMissingMethods,
+ Opt_WarnDuplicateExports,
+ Opt_WarnMisc
+ ]
+
+minusWOpts
+ = standardWarnings ++
+ [ Opt_WarnUnusedBinds,
+ Opt_WarnUnusedMatches,
+ Opt_WarnUnusedImports,
+ Opt_WarnIncompletePatterns
+ ]
+
+minusWallOpts
+ = minusWOpts ++
+ [ Opt_WarnTypeDefaults,
+ Opt_WarnNameShadowing,
+ Opt_WarnMissingSigs,
+ Opt_WarnHiShadows
+ ]
+\end{code}
+
+%************************************************************************
+%* *
\subsection{Classifying command-line options}
%* *
%************************************************************************
-- language opts
opt_AllStrict = lookUp SLIT("-fall-strict")
+opt_NoMonomorphismRestriction = lookUp SLIT("-fno-monomorphism-restriction")
opt_DictsStrict = lookUp SLIT("-fdicts-strict")
opt_IrrefutableTuples = lookUp SLIT("-firrefutable-tuples")
opt_MaxContextReductionDepth = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
opt_SMP = lookUp SLIT("-fsmp")
-- optimisation opts
+opt_NoMethodSharing = lookUp SLIT("-fno-method-sharing")
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 '-package prelude'
+ The Prelude, for example is compiled with '-inpackage std'
-}
opt_InPackage = case lookup_str "-inpackage=" of
Just p -> _PK_ p
opt_NoHiCheck = lookUp SLIT("-fno-hi-version-check")
opt_OmitBlackHoling = lookUp SLIT("-dno-black-holing")
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_SimplCaseOfCase = lookUp SLIT("-fcase-of-case")
-opt_SimplCaseMerge = lookUp SLIT("-fcase-merge")
-opt_SimplPedanticBottoms = lookUp SLIT("-fpedantic-bottoms")
-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
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}
%************************************************************************
"fignore-asserts",
"fignore-interface-pragmas",
"fno-hi-version-check",
- "fno-implicit-prelude",
"dno-black-holing",
+ "fno-method-sharing",
+ "fno-monomorphism-restriction",
"fomit-interface-pragmas",
+ "fkeep-stg-types",
"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",
"fcontext-stack",
"fliberate-case-threshold",
"fhistory-size",
- "funfolding-interface-threshold",
"funfolding-creation-threshold",
"funfolding-use-threshold",
"funfolding-fun-discount",