Separate NondecreasingIndentation out into its own extension
authorIan Lynagh <igloo@earth.li>
Wed, 24 Nov 2010 22:05:07 +0000 (22:05 +0000)
committerIan Lynagh <igloo@earth.li>
Wed, 24 Nov 2010 22:05:07 +0000 (22:05 +0000)
compiler/main/DynFlags.hs
compiler/parser/Lexer.x

index c062165..4c52d2a 100644 (file)
@@ -361,6 +361,7 @@ data ExtensionFlag
    | Opt_AlternativeLayoutRule
    | Opt_AlternativeLayoutRuleTransitional
    | Opt_DatatypeContexts
    | Opt_AlternativeLayoutRule
    | Opt_AlternativeLayoutRuleTransitional
    | Opt_DatatypeContexts
+   | Opt_NondecreasingIndentation
    | Opt_RelaxedLayout
    deriving (Eq, Show)
 
    | 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
       -- 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)
 
     : 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 ),
   ( "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, 
   ( "RelaxedLayout",                    Opt_RelaxedLayout, nop ),
   ( "MonoLocalBinds",                   Opt_MonoLocalBinds, nop ),
   ( "RelaxedPolyRec",                   Opt_RelaxedPolyRec, 
index 823fc6d..6b73981 100644 (file)
@@ -1120,8 +1120,8 @@ new_layout_context strict span _buf _len = do
     (AI l _) <- getInput
     let offset = srcLocCol l
     ctx <- getContext
     (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  ||
     case ctx of
        Layout prev_off : _  | 
           (strict'     && prev_off >= offset  ||
@@ -1778,6 +1778,8 @@ alternativeLayoutRuleBit :: Int
 alternativeLayoutRuleBit = 23
 relaxedLayoutBit :: Int
 relaxedLayoutBit = 24
 alternativeLayoutRuleBit = 23
 relaxedLayoutBit :: Int
 relaxedLayoutBit = 24
+nondecreasingIndentationBit :: Int
+nondecreasingIndentationBit = 25
 
 always :: Int -> Bool
 always           _     = True
 
 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
 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
 --
 
 -- 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
                .|. 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
       --
       setBitIf :: Int -> Bool -> Int
       b `setBitIf` cond | cond      = bit b