X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fparser%2FLexer.x;h=90fbf7a8c23cd5aab750aa0fa1f99d66a5e57fa9;hb=5d3051c66796dcf884b052f9e4afc3ed19b9f514;hp=27b6e2d7c69dfdbee2edd7e9fb994c566bc2f4e4;hpb=7434eae33776ba56eae28dfd85172dd86d180be2;p=ghc-hetmet.git diff --git a/ghc/compiler/parser/Lexer.x b/ghc/compiler/parser/Lexer.x index 27b6e2d..90fbf7a 100644 --- a/ghc/compiler/parser/Lexer.x +++ b/ghc/compiler/parser/Lexer.x @@ -26,7 +26,8 @@ module Lexer ( P(..), ParseResult(..), getSrcLoc, failLocMsgP, failSpanMsgP, srcParseFail, popContext, pushCurrentContext, setLastToken, setSrcLoc, - getLexState, popLexState, pushLexState + getLexState, popLexState, pushLexState, + extension, bangPatEnabled ) where #include "HsVersions.h" @@ -559,11 +560,13 @@ reservedSymsFM = listToUFM $ ,(">>-", ITRarrowtail, bit arrowsBit) #if __GLASGOW_HASKELL__ >= 605 - ,("λ", ITlam, 0) - ,("∀", ITforall, bit tvBit) - ,("→", ITrarrow, 0) - ,("←", ITlarrow, 0) - ,("⋯", ITdotdot, 0) + ,("λ", ITlam, bit glaExtsBit) + ,("∷", ITdcolon, bit glaExtsBit) + ,("⇒", ITdarrow, bit glaExtsBit) + ,("∀", ITforall, bit glaExtsBit) + ,("→", ITrarrow, bit glaExtsBit) + ,("←", ITlarrow, bit glaExtsBit) + ,("⋯", ITdotdot, bit glaExtsBit) #endif ] @@ -1255,6 +1258,8 @@ arrowsBit = 4 thBit = 5 ipBit = 6 tvBit = 7 -- Scoped type variables enables 'forall' keyword +bangPatBit = 8 -- Tells the parser to understand bang-patterns + -- (doesn't affect the lexer) glaExtsEnabled, ffiEnabled, parrEnabled :: Int -> Bool glaExtsEnabled flags = testBit flags glaExtsBit @@ -1264,6 +1269,7 @@ arrowsEnabled flags = testBit flags arrowsBit thEnabled flags = testBit flags thBit ipEnabled flags = testBit flags ipBit tvEnabled flags = testBit flags tvBit +bangPatEnabled flags = testBit flags bangPatBit -- create a parse state -- @@ -1288,6 +1294,7 @@ mkPState buf loc flags = .|. thBit `setBitIf` dopt Opt_TH flags .|. ipBit `setBitIf` dopt Opt_ImplicitParams flags .|. tvBit `setBitIf` dopt Opt_ScopedTypeVariables flags + .|. bangPatBit `setBitIf` dopt Opt_BangPatterns flags -- setBitIf :: Int -> Bool -> Int b `setBitIf` cond | cond = bit b