Add some comments on the alternative layout rule state
[ghc-hetmet.git] / compiler / parser / Lexer.x
index c6457a4..cae5349 100644 (file)
@@ -1290,7 +1290,7 @@ finish_char_tok loc ch    -- We've already seen the closing quote
                                return (L (mkSrcSpan loc end) (ITprimchar ch))
                        _other ->
                                return (L (mkSrcSpan loc end) (ITchar ch))
-               else do
+           else do
                   return (L (mkSrcSpan loc end) (ITchar ch))
 
 lex_char :: Char -> AlexInput -> P Char
@@ -1499,10 +1499,19 @@ data PState = PState {
        context    :: [LayoutContext],
        lex_state  :: [Int],
         -- Used in the alternative layout rule:
+        -- These tokens are the next ones to be sent out. They are
+        -- just blindly emitted, without the rule looking at them again:
         alr_pending_implicit_tokens :: [Located Token],
+        -- This is the next token to be considered or, if it is Nothing,
+        -- we need to get the next token from the input stream:
         alr_next_token :: Maybe (Located Token),
+        -- This is what we consider to be the locatino of the last token
+        -- emitted:
         alr_last_loc :: SrcSpan,
+        -- The stack of layout contexts:
         alr_context :: [ALRContext],
+        -- Are we expecting a '{'? If it's Just, then the ALRLayout tells
+        -- us what sort of layout the '{' will open:
         alr_expecting_ocurly :: Maybe ALRLayout
      }
        -- last_loc and last_len are used when generating error messages,
@@ -1985,6 +1994,14 @@ alternativeLayoutRuleToken t
              newLine = (lastLoc == noSrcSpan)
                     || (srcSpanStartLine thisLoc > srcSpanEndLine lastLoc)
          case (unLoc t, context, mExpectingOCurly) of
+             -- This case handles a GHC extension to the original H98
+             -- layout rule...
+             (ITocurly, _, Just _) ->
+                 do setAlrExpectingOCurly Nothing
+                    setALRContext (ALRNoLayout (containsCommas ITocurly) : context)
+                    return t
+             -- ...and makes this case unnecessary
+             {-
              -- I think our implicit open-curly handling is slightly
              -- different to John's, in how it interacts with newlines
              -- and "in"
@@ -1992,6 +2009,7 @@ alternativeLayoutRuleToken t
                  do setAlrExpectingOCurly Nothing
                     setNextToken t
                     lexTokenAlr
+             -}
              (_, ALRLayout _ col : ls, Just expectingOCurly)
               | (thisCol > col) ||
                 (thisCol == col &&