From: Ian Lynagh Date: Wed, 24 Nov 2010 22:05:07 +0000 (+0000) Subject: Separate NondecreasingIndentation out into its own extension X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=5fa086c51816f09d03fb1a089dde64df6bd2d8a3 Separate NondecreasingIndentation out into its own extension --- diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index c062165..4c52d2a 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -361,6 +361,7 @@ data ExtensionFlag | Opt_AlternativeLayoutRule | Opt_AlternativeLayoutRuleTransitional | Opt_DatatypeContexts + | Opt_NondecreasingIndentation | Opt_RelaxedLayout deriving (Eq, Show) @@ -795,6 +796,7 @@ languageExtensions Nothing -- In due course I'd like Opt_MonoLocalBinds to be on by default -- But NB it's implied by GADTs etc -- SLPJ September 2010 + : Opt_NondecreasingIndentation -- This has been on by default for some time : Opt_RelaxedLayout -- This has been on by default for some time : languageExtensions (Just Haskell2010) @@ -1593,6 +1595,7 @@ xFlags = [ ( "AlternativeLayoutRule", Opt_AlternativeLayoutRule, nop ), ( "AlternativeLayoutRuleTransitional",Opt_AlternativeLayoutRuleTransitional, nop ), ( "DatatypeContexts", Opt_DatatypeContexts, nop ), + ( "NondecreasingIndentation", Opt_NondecreasingIndentation, nop ), ( "RelaxedLayout", Opt_RelaxedLayout, nop ), ( "MonoLocalBinds", Opt_MonoLocalBinds, nop ), ( "RelaxedPolyRec", Opt_RelaxedPolyRec, diff --git a/compiler/parser/Lexer.x b/compiler/parser/Lexer.x index 823fc6d..6b73981 100644 --- a/compiler/parser/Lexer.x +++ b/compiler/parser/Lexer.x @@ -1120,8 +1120,8 @@ new_layout_context strict span _buf _len = do (AI l _) <- getInput let offset = srcLocCol l ctx <- getContext - relaxed <- extension relaxedLayout - let strict' = strict || not relaxed + nondecreasing <- extension nondecreasingIndentation + let strict' = strict || not nondecreasing case ctx of Layout prev_off : _ | (strict' && prev_off >= offset || @@ -1778,6 +1778,8 @@ alternativeLayoutRuleBit :: Int alternativeLayoutRuleBit = 23 relaxedLayoutBit :: Int relaxedLayoutBit = 24 +nondecreasingIndentationBit :: Int +nondecreasingIndentationBit = 25 always :: Int -> Bool always _ = True @@ -1823,6 +1825,8 @@ alternativeLayoutRule :: Int -> Bool alternativeLayoutRule flags = testBit flags alternativeLayoutRuleBit relaxedLayout :: Int -> Bool relaxedLayout flags = testBit flags relaxedLayoutBit +nondecreasingIndentation :: Int -> Bool +nondecreasingIndentation flags = testBit flags nondecreasingIndentationBit -- PState for parsing options pragmas -- @@ -1877,6 +1881,7 @@ mkPState flags buf loc = .|. newQualOpsBit `setBitIf` xopt Opt_NewQualifiedOperators flags .|. alternativeLayoutRuleBit `setBitIf` xopt Opt_AlternativeLayoutRule flags .|. relaxedLayoutBit `setBitIf` xopt Opt_RelaxedLayout flags + .|. nondecreasingIndentationBit `setBitIf` xopt Opt_NondecreasingIndentation flags -- setBitIf :: Int -> Bool -> Int b `setBitIf` cond | cond = bit b