- | SimplMayDeleteConjurableIds
- | SimplPedanticBottoms -- see Simplifier for an explanation
- | SimplDoArityExpand -- expand arity of bindings
- | SimplDoFoldrBuild -- This is the per-simplification flag;
- -- see also FoldrBuildOn, used elsewhere
- -- in the compiler.
- | SimplDoInlineFoldrBuild
- -- inline foldr/build (*after* f/b rule is used)
-
- | IgnoreINLINEPragma
- | SimplDoLambdaEtaExpansion
-
- | EssentialUnfoldingsOnly -- never mind the thresholds, only
- -- do unfoldings that *must* be done
- -- (to saturate constructors and primitives)
-
- | ShowSimplifierProgress -- report counts on every interation
-
- | MaxSimplifierIterations Int
-
- | SimplNoLetFromCase -- used when turning off floating entirely
- | SimplNoLetFromApp -- (for experimentation only) WDP 95/10
- | SimplNoLetFromStrictLet
-
- | SimplDontFoldBackAppend
- -- we fold `foldr (:)' back into flip (++),
- -- but we *don't* want to do it when compiling
- -- List.hs, otherwise
- -- xs ++ ys = foldr (:) ys xs
- -- {- via our loopback -}
- -- xs ++ ys = xs ++ ys
- -- Oops!
- -- So only use this flag inside List.hs
- -- (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}
+
+%************************************************************************
+%* *
+\subsection{Dynamic command-line options}
+%* *
+%************************************************************************
+
+\begin{code}
+data DynFlag
+
+ -- debugging flags
+ = Opt_D_dump_all
+ | Opt_D_dump_most
+ | Opt_D_dump_absC
+ | Opt_D_dump_asm
+ | Opt_D_dump_cpranal
+ | Opt_D_dump_deriv
+ | Opt_D_dump_ds
+ | Opt_D_dump_flatC
+ | Opt_D_dump_foreign
+ | Opt_D_dump_inlinings
+ | Opt_D_dump_occur_anal
+ | Opt_D_dump_parsed
+ | Opt_D_dump_realC
+ | Opt_D_dump_rn
+ | Opt_D_dump_simpl
+ | Opt_D_dump_simpl_iterations
+ | Opt_D_dump_spec
+ | Opt_D_dump_stg
+ | Opt_D_dump_stranal
+ | Opt_D_dump_tc
+ | Opt_D_dump_types
+ | Opt_D_dump_rules
+ | Opt_D_dump_usagesp
+ | Opt_D_dump_cse
+ | Opt_D_dump_worker_wrapper
+ | Opt_D_show_passes
+ | Opt_D_dump_rn_trace
+ | Opt_D_dump_rn_stats
+ | Opt_D_dump_stix
+ | Opt_D_dump_simpl_stats
+ | Opt_D_source_stats
+ | Opt_D_verbose_core2core
+ | Opt_D_verbose_stg2stg
+ | Opt_D_dump_hi_diffs
+ | Opt_D_dump_minimal_imports
+ | Opt_DoCoreLinting
+ | Opt_DoStgLinting
+ | Opt_DoUSPLinting
+
+ -- language opts
+ | Opt_AllowOverlappingInstances
+ | Opt_AllowUndecidableInstances
+ | Opt_GlasgowExts
+ deriving (Eq)
+
+data DynFlags = DynFlags {
+ coreToDo :: CoreToDo,
+ stgToDo :: StgToDo,
+ hscLang :: HscLang,
+ flags :: [DynFlag]
+ }
+
+boolOpt :: DynFlag -> DynFlags -> Bool
+boolOpt f dflags = f `elem` (flags dflags)
+
+dopt_D_dump_all = boolOpt Opt_D_dump_all
+dopt_D_dump_most = boolOpt Opt_D_dump_most
+dopt_D_dump_absC = boolOpt Opt_D_dump_absC
+dopt_D_dump_asm = boolOpt Opt_D_dump_asm
+dopt_D_dump_cpranal = boolOpt Opt_D_dump_cpranal
+dopt_D_dump_deriv = boolOpt Opt_D_dump_deriv
+dopt_D_dump_ds = boolOpt Opt_D_dump_ds
+dopt_D_dump_flatC = boolOpt Opt_D_dump_flatC
+dopt_D_dump_foreign = boolOpt Opt_D_dump_foreign
+dopt_D_dump_inlinings = boolOpt Opt_D_dump_inlinings
+dopt_D_dump_occur_anal = boolOpt Opt_D_dump_occur_anal
+dopt_D_dump_parsed = boolOpt Opt_D_dump_parsed
+dopt_D_dump_realC = boolOpt Opt_D_dump_realC
+dopt_D_dump_rn = boolOpt Opt_D_dump_rn
+dopt_D_dump_simpl = boolOpt Opt_D_dump_simpl
+dopt_D_dump_simpl_iterations = boolOpt Opt_D_dump_simpl_iterations
+dopt_D_dump_spec = boolOpt Opt_D_dump_spec
+dopt_D_dump_stg = boolOpt Opt_D_dump_stg
+dopt_D_dump_stranal = boolOpt Opt_D_dump_stranal
+dopt_D_dump_tc = boolOpt Opt_D_dump_tc
+dopt_D_dump_types = boolOpt Opt_D_dump_types
+dopt_D_dump_rules = boolOpt Opt_D_dump_rules
+dopt_D_dump_usagesp = boolOpt Opt_D_dump_usagesp
+dopt_D_dump_cse = boolOpt Opt_D_dump_cse
+dopt_D_dump_worker_wrapper = boolOpt Opt_D_dump_worker_wrapper
+dopt_D_show_passes = boolOpt Opt_D_show_passes
+dopt_D_dump_rn_trace = boolOpt Opt_D_dump_rn_trace
+dopt_D_dump_rn_stats = boolOpt Opt_D_dump_rn_stats
+dopt_D_dump_stix = boolOpt Opt_D_dump_stix
+dopt_D_dump_simpl_stats = boolOpt Opt_D_dump_simpl_stats
+dopt_D_source_stats = boolOpt Opt_D_source_stats
+dopt_D_verbose_core2core = boolOpt Opt_D_verbose_core2core
+dopt_D_verbose_stg2stg = boolOpt Opt_D_verbose_stg2stg
+dopt_D_dump_hi_diffs = boolOpt Opt_D_dump_hi_diffs
+dopt_D_dump_minimal_imports = boolOpt Opt_D_dump_minimal_imports
+dopt_DoCoreLinting = boolOpt Opt_DoCoreLinting
+dopt_DoStgLinting = boolOpt Opt_DoStgLinting
+dopt_DoUSPLinting = boolOpt Opt_DoUSPLinting
+
+dopt_AllowOverlappingInstances = boolOpt Opt_AllowOverlappingInstances
+dopt_AllowUndecidableInstances = boolOpt Opt_AllowUndecidableInstances
+dopt_GlasgowExts = boolOpt Opt_GlasgowExts
+
+dopt_CoreToDo :: DynFlags -> CoreToDo
+dopt_CoreToDo = coreToDo
+
+dopt_StgToDo :: DynFlags -> StgToDo
+dopt_StgToDo = stgToDo
+
+data HscLang
+ = HscC
+ | HscAsm
+ | HscJava
+ deriving Eq
+
+dopt_HscLang :: DynFlags -> HscLang
+dopt_HscLang = hscLang