From: Ian Lynagh Date: Sun, 8 Jul 2007 15:06:31 +0000 (+0000) Subject: Implement -XRecursiveDo X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=c71662b207222b409ac678b5e6c55d0fec8df2b7 Implement -XRecursiveDo --- diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 26948e1..b033bf3 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -189,6 +189,7 @@ data DynFlag | Opt_KindSignatures | Opt_ParallelListComp | Opt_GeneralizedNewtypeDeriving + | Opt_RecursiveDo -- optimisation opts | Opt_Strictness @@ -1106,6 +1107,7 @@ xFlags = [ ( "FFI", Opt_FFI ), -- ...and also `-fffi' ( "ForeignFunctionInterface", Opt_FFI ), + ( "RecursiveDo", Opt_RecursiveDo ), ( "Arrows", Opt_Arrows ), -- arrow syntax ( "Parr", Opt_PArr ), @@ -1149,6 +1151,7 @@ glasgowExtsFlags = [ Opt_GlasgowExts , Opt_ScopedTypeVariables , Opt_MultiParamTypeClasses , Opt_MagicHash + , Opt_RecursiveDo , Opt_ParallelListComp , Opt_EmptyDataDecls , Opt_KindSignatures diff --git a/compiler/parser/Lexer.x b/compiler/parser/Lexer.x index e008456..11810a6 100644 --- a/compiler/parser/Lexer.x +++ b/compiler/parser/Lexer.x @@ -614,7 +614,7 @@ reservedWordsFM = listToUFM $ ( "_scc_", ITscc, 0 ), -- ToDo: remove ( "forall", ITforall, bit tvBit), - ( "mdo", ITmdo, bit glaExtsBit), + ( "mdo", ITmdo, bit recursiveDoBit), ( "family", ITfamily, bit tyFamBit), ( "foreign", ITforeign, bit ffiBit), @@ -1518,7 +1518,8 @@ bangPatBit = 8 -- Tells the parser to understand bang-patterns tyFamBit = 9 -- indexed type families: 'family' keyword and kind sigs haddockBit = 10 -- Lex and parse Haddock comments magicHashBit = 11 -- # in both functions and operators -kindSigsBit = 12 -- # in both functions and operators +kindSigsBit = 12 -- Kind signatures on type variables +recursiveDoBit = 13 -- mdo glaExtsEnabled, ffiEnabled, parrEnabled :: Int -> Bool glaExtsEnabled flags = testBit flags glaExtsBit @@ -1533,6 +1534,7 @@ tyFamEnabled flags = testBit flags tyFamBit haddockEnabled flags = testBit flags haddockBit magicHashEnabled flags = testBit flags magicHashBit kindSigsEnabled flags = testBit flags kindSigsBit +recursiveDoEnabled flags = testBit flags recursiveDoBit -- PState for parsing options pragmas -- @@ -1586,6 +1588,7 @@ mkPState buf loc flags = .|. haddockBit `setBitIf` dopt Opt_Haddock flags .|. magicHashBit `setBitIf` dopt Opt_MagicHash flags .|. kindSigsBit `setBitIf` dopt Opt_KindSignatures flags + .|. recursiveDoBit `setBitIf` dopt Opt_RecursiveDo flags -- setBitIf :: Int -> Bool -> Int b `setBitIf` cond | cond = bit b