diff options
Diffstat (limited to 'compiler/main/DynFlags.hs')
-rw-r--r-- | compiler/main/DynFlags.hs | 22 |
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 |