summaryrefslogtreecommitdiff
path: root/compiler/main/DynFlags.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/main/DynFlags.hs')
-rw-r--r--compiler/main/DynFlags.hs22
1 files changed, 18 insertions, 4 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 26662d5cf0..5e3bda9723 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -396,6 +396,7 @@ data GeneralFlag
| Opt_GhciHistory
| Opt_HelpfulErrors
| Opt_DeferTypeErrors
+ | Opt_DeferTypedHoles
| Opt_Parallel
| Opt_GranMacros
| Opt_PIC
@@ -2769,6 +2770,7 @@ fFlags = [
flagSpec ( "cmm-sink", Opt_CmmSink, nop ),
flagSpec ( "cse", Opt_CSE, nop ),
flagSpec ( "defer-type-errors", Opt_DeferTypeErrors, nop ),
+ flagSpec ( "defer-typed-holes", Opt_DeferTypedHoles, nop ),
flagSpec ( "dicts-cheap", Opt_DictsCheap, nop ),
flagSpec ( "dicts-strict", Opt_DictsStrict, nop ),
flagSpec ( "dmd-tx-dict-sel", Opt_DmdTxDictSel, nop ),
@@ -3053,8 +3055,11 @@ default_PIC platform =
(OSDarwin, ArchX86_64) -> [Opt_PIC]
_ -> []
-impliedFlags :: [(ExtensionFlag, TurnOnFlag, ExtensionFlag)]
-impliedFlags
+impliedGFlags :: [(GeneralFlag, TurnOnFlag, GeneralFlag)]
+impliedGFlags = [(Opt_DeferTypeErrors, turnOn, Opt_DeferTypedHoles)]
+
+impliedXFlags :: [(ExtensionFlag, TurnOnFlag, ExtensionFlag)]
+impliedXFlags
-- See Note [Updating flag description in the User's Guide]
= [ (Opt_RankNTypes, turnOn, Opt_ExplicitForAll)
, (Opt_ScopedTypeVariables, turnOn, Opt_ExplicitForAll)
@@ -3399,9 +3404,18 @@ setGeneralFlag f = upd (setGeneralFlag' f)
unSetGeneralFlag f = upd (unSetGeneralFlag' f)
setGeneralFlag' :: GeneralFlag -> DynFlags -> DynFlags
-setGeneralFlag' f dflags = gopt_set dflags f
+setGeneralFlag' f dflags = foldr ($) (gopt_set dflags f) deps
+ where
+ deps = [ if turn_on then setGeneralFlag' d
+ else unSetGeneralFlag' d
+ | (f', turn_on, d) <- impliedGFlags, f' == f ]
+ -- When you set f, set the ones it implies
+ -- NB: use setGeneralFlag recursively, in case the implied flags
+ -- implies further flags
+
unSetGeneralFlag' :: GeneralFlag -> DynFlags -> DynFlags
unSetGeneralFlag' f dflags = gopt_unset dflags f
+ -- When you un-set f, however, we don't un-set the things it implies
--------------------------
setWarningFlag, unSetWarningFlag :: WarningFlag -> DynP ()
@@ -3418,7 +3432,7 @@ setExtensionFlag' f dflags = foldr ($) (xopt_set dflags f) deps
where
deps = [ if turn_on then setExtensionFlag' d
else unSetExtensionFlag' d
- | (f', turn_on, d) <- impliedFlags, f' == f ]
+ | (f', turn_on, d) <- impliedXFlags, f' == f ]
-- When you set f, set the ones it implies
-- NB: use setExtensionFlag recursively, in case the implied flags
-- implies further flags