projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add PrimCall to the STG layer and update Core -> STG translation
[ghc-hetmet.git]
/
compiler
/
parser
/
Lexer.x
diff --git
a/compiler/parser/Lexer.x
b/compiler/parser/Lexer.x
index
edfbecd
..
5cc85ae
100644
(file)
--- a/
compiler/parser/Lexer.x
+++ b/
compiler/parser/Lexer.x
@@
-12,7
+12,6
@@
-----------------------------------------------------------------------------
-- ToDo / known bugs:
-----------------------------------------------------------------------------
-- ToDo / known bugs:
--- - Unicode
-- - parsing integers is a bit slow
-- - readRational is a bit slow
--
-- - parsing integers is a bit slow
-- - readRational is a bit slow
--
@@
-32,7
+31,7
@@
-- qualified varids.
{
-- qualified varids.
{
-{-# OPTIONS -Wwarn #-}
+{-# OPTIONS -Wwarn -w #-}
-- The above warning supression flag is a temporary kludge.
-- While working on this module you are encouraged to remove it and fix
-- any warnings in the module. See
-- The above warning supression flag is a temporary kludge.
-- While working on this module you are encouraged to remove it and fix
-- any warnings in the module. See
@@
-61,7
+60,6
@@
import ErrUtils
import Outputable
import StringBuffer
import FastString
import Outputable
import StringBuffer
import FastString
-import FastTypes
import SrcLoc
import UniqFM
import DynFlags
import SrcLoc
import UniqFM
import DynFlags
@@
-72,7
+70,6
@@
import Control.Monad
import Data.Bits
import Data.Char
import Data.Ratio
import Data.Bits
import Data.Char
import Data.Ratio
-import Debug.Trace
}
$unispace = \x05 -- Trick Alex into handling Unicode. See alexGetChar.
}
$unispace = \x05 -- Trick Alex into handling Unicode. See alexGetChar.
@@
-487,6
+484,7
@@
data Token
| ITunsafe
| ITstdcallconv
| ITccallconv
| ITunsafe
| ITstdcallconv
| ITccallconv
+ | ITprimcallconv
| ITdotnet
| ITmdo
| ITfamily
| ITdotnet
| ITmdo
| ITfamily
@@
-634,6
+632,7
@@
isSpecial ITthreadsafe = True
isSpecial ITunsafe = True
isSpecial ITccallconv = True
isSpecial ITstdcallconv = True
isSpecial ITunsafe = True
isSpecial ITccallconv = True
isSpecial ITstdcallconv = True
+isSpecial ITprimcallconv = True
isSpecial ITmdo = True
isSpecial ITfamily = True
isSpecial ITgroup = True
isSpecial ITmdo = True
isSpecial ITfamily = True
isSpecial ITgroup = True
@@
-649,6
+648,7
@@
isSpecial _ = False
-- facilitates using a keyword in two different extensions that can be
-- activated independently)
--
-- facilitates using a keyword in two different extensions that can be
-- activated independently)
--
+reservedWordsFM :: UniqFM (Token, Int)
reservedWordsFM = listToUFM $
map (\(x, y, z) -> (mkFastString x, (y, z)))
[( "_", ITunderscore, 0 ),
reservedWordsFM = listToUFM $
map (\(x, y, z) -> (mkFastString x, (y, z)))
[( "_", ITunderscore, 0 ),
@@
-690,10
+690,11
@@
reservedWordsFM = listToUFM $
( "label", ITlabel, bit ffiBit),
( "dynamic", ITdynamic, bit ffiBit),
( "safe", ITsafe, bit ffiBit),
( "label", ITlabel, bit ffiBit),
( "dynamic", ITdynamic, bit ffiBit),
( "safe", ITsafe, bit ffiBit),
- ( "threadsafe", ITthreadsafe, bit ffiBit),
+ ( "threadsafe", ITthreadsafe, bit ffiBit), -- ToDo: remove
( "unsafe", ITunsafe, bit ffiBit),
( "stdcall", ITstdcallconv, bit ffiBit),
( "ccall", ITccallconv, bit ffiBit),
( "unsafe", ITunsafe, bit ffiBit),
( "stdcall", ITstdcallconv, bit ffiBit),
( "ccall", ITccallconv, bit ffiBit),
+ ( "prim", ITprimcallconv, bit ffiBit),
( "dotnet", ITdotnet, bit ffiBit),
( "rec", ITrec, bit arrowsBit),
( "dotnet", ITdotnet, bit ffiBit),
( "rec", ITrec, bit arrowsBit),
@@
-778,14
+779,18
@@
pop_and :: Action -> Action
pop_and act span buf len = do popLexState; act span buf len
{-# INLINE nextCharIs #-}
pop_and act span buf len = do popLexState; act span buf len
{-# INLINE nextCharIs #-}
+nextCharIs :: StringBuffer -> (Char -> Bool) -> Bool
nextCharIs buf p = not (atEnd buf) && p (currentChar buf)
nextCharIs buf p = not (atEnd buf) && p (currentChar buf)
+notFollowedBy :: Char -> AlexAccPred Int
notFollowedBy char _ _ _ (AI _ _ buf)
= nextCharIs buf (/=char)
notFollowedBy char _ _ _ (AI _ _ buf)
= nextCharIs buf (/=char)
+notFollowedBySymbol :: AlexAccPred Int
notFollowedBySymbol _ _ _ (AI _ _ buf)
= nextCharIs buf (`notElem` "!#$%&*+./<=>?@\\^|-~")
notFollowedBySymbol _ _ _ (AI _ _ buf)
= nextCharIs buf (`notElem` "!#$%&*+./<=>?@\\^|-~")
+notFollowedByPragmaChar :: AlexAccPred Int
notFollowedByPragmaChar _ _ _ (AI _ _ buf)
= nextCharIs buf (\c -> not (isAlphaNum c || c == '_'))
notFollowedByPragmaChar _ _ _ (AI _ _ buf)
= nextCharIs buf (\c -> not (isAlphaNum c || c == '_'))
@@
-794,6
+799,7
@@
notFollowedByPragmaChar _ _ _ (AI _ _ buf)
-- maximal munch, but not always, because the nested comment rule is
-- valid in all states, but the doc-comment rules are only valid in
-- the non-layout states.
-- maximal munch, but not always, because the nested comment rule is
-- valid in all states, but the doc-comment rules are only valid in
-- the non-layout states.
+isNormalComment :: AlexAccPred Int
isNormalComment bits _ _ (AI _ _ buf)
| haddockEnabled bits = notFollowedByDocOrPragma
| otherwise = nextCharIs buf (/='#')
isNormalComment bits _ _ (AI _ _ buf)
| haddockEnabled bits = notFollowedByDocOrPragma
| otherwise = nextCharIs buf (/='#')
@@
-801,6
+807,7
@@
isNormalComment bits _ _ (AI _ _ buf)
notFollowedByDocOrPragma
= not $ spaceAndP buf (`nextCharIs` (`elem` "|^*$#"))
notFollowedByDocOrPragma
= not $ spaceAndP buf (`nextCharIs` (`elem` "|^*$#"))
+spaceAndP :: StringBuffer -> (StringBuffer -> Bool) -> Bool
spaceAndP buf p = p buf || nextCharIs buf (==' ') && p (snd (nextChar buf))
{-
spaceAndP buf p = p buf || nextCharIs buf (==' ') && p (snd (nextChar buf))
{-
@@
-808,8
+815,10
@@
haddockDisabledAnd p bits _ _ (AI _ _ buf)
= if haddockEnabled bits then False else (p buf)
-}
= if haddockEnabled bits then False else (p buf)
-}
+atEOL :: AlexAccPred Int
atEOL _ _ _ (AI _ _ buf) = atEnd buf || currentChar buf == '\n'
atEOL _ _ _ (AI _ _ buf) = atEnd buf || currentChar buf == '\n'
+ifExtension :: (Int -> Bool) -> AlexAccPred Int
ifExtension pred bits _ _ _ = pred bits
multiline_doc_comment :: Action
ifExtension pred bits _ _ _ = pred bits
multiline_doc_comment :: Action
@@
-890,6
+899,8
@@
nested_doc_comment span buf _len = withLexedDocType (go "")
Just (_,_) -> go ('\123':commentAcc) input docType False
Just (c,input) -> go (c:commentAcc) input docType False
Just (_,_) -> go ('\123':commentAcc) input docType False
Just (c,input) -> go (c:commentAcc) input docType False
+withLexedDocType :: (AlexInput -> (String -> Token) -> Bool -> P (Located Token))
+ -> P (Located Token)
withLexedDocType lexDocComment = do
input@(AI _ _ buf) <- getInput
case prevChar buf ' ' of
withLexedDocType lexDocComment = do
input@(AI _ _ buf) <- getInput
case prevChar buf ' ' of
@@
-898,6
+909,7
@@
withLexedDocType lexDocComment = do
'$' -> lexDocComment input ITdocCommentNamed False
'*' -> lexDocSection 1 input
'#' -> lexDocComment input ITdocOptionsOld False
'$' -> lexDocComment input ITdocCommentNamed False
'*' -> lexDocSection 1 input
'#' -> lexDocComment input ITdocOptionsOld False
+ _ -> panic "withLexedDocType: Bad doc type"
where
lexDocSection n input = case alexGetChar input of
Just ('*', input) -> lexDocSection (n+1) input
where
lexDocSection n input = case alexGetChar input of
Just ('*', input) -> lexDocSection (n+1) input
@@
-907,12
+919,12
@@
withLexedDocType lexDocComment = do
-- RULES pragmas turn on the forall and '.' keywords, and we turn them
-- off again at the end of the pragma.
rulePrag :: Action
-- RULES pragmas turn on the forall and '.' keywords, and we turn them
-- off again at the end of the pragma.
rulePrag :: Action
-rulePrag span buf len = do
+rulePrag span _ _ = do
setExts (.|. bit inRulePragBit)
return (L span ITrules_prag)
endPrag :: Action
setExts (.|. bit inRulePragBit)
return (L span ITrules_prag)
endPrag :: Action
-endPrag span buf len = do
+endPrag span _ _ = do
setExts (.&. complement (bit inRulePragBit))
return (L span ITclose_prag)
setExts (.&. complement (bit inRulePragBit))
return (L span ITclose_prag)
@@
-948,8
+960,9
@@
docCommentEnd input commentAcc docType buf span = do
span `seq` setLastToken span' last_len last_line_len
return (L span' (docType comment))
span `seq` setLastToken span' last_len last_line_len
return (L span' (docType comment))
+errBrace :: AlexInput -> SrcSpan -> P a
errBrace (AI end _ _) span = failLocMsgP (srcSpanStart span) end "unterminated `{-'"
errBrace (AI end _ _) span = failLocMsgP (srcSpanStart span) end "unterminated `{-'"
-
+
open_brace, close_brace :: Action
open_brace span _str _len = do
ctx <- getContext
open_brace, close_brace :: Action
open_brace span _str _len = do
ctx <- getContext
@@
-959,6
+972,7
@@
close_brace span _str _len = do
popContext
return (L span ITccurly)
popContext
return (L span ITccurly)
+qvarid, qconid :: StringBuffer -> Int -> Token
qvarid buf len = ITqvarid $! splitQualName buf len False
qconid buf len = ITqconid $! splitQualName buf len False
qvarid buf len = ITqvarid $! splitQualName buf len False
qconid buf len = ITqconid $! splitQualName buf len False
@@
-992,7
+1006,8
@@
splitQualName orig_buf len parens = split orig_buf orig_buf
where
qual_size = orig_buf `byteDiff` dot_buf
where
qual_size = orig_buf `byteDiff` dot_buf
-varid span buf len =
+varid :: Action
+varid span buf len =
fs `seq`
case lookupUFM reservedWordsFM fs of
Just (keyword,0) -> do
fs `seq`
case lookupUFM reservedWordsFM fs of
Just (keyword,0) -> do
@@
-1007,17
+1022,22
@@
varid span buf len =
where
fs = lexemeToFastString buf len
where
fs = lexemeToFastString buf len
+conid :: StringBuffer -> Int -> Token
conid buf len = ITconid fs
where fs = lexemeToFastString buf len
conid buf len = ITconid fs
where fs = lexemeToFastString buf len
+qvarsym, qconsym, prefixqvarsym, prefixqconsym :: StringBuffer -> Int -> Token
qvarsym buf len = ITqvarsym $! splitQualName buf len False
qconsym buf len = ITqconsym $! splitQualName buf len False
prefixqvarsym buf len = ITprefixqvarsym $! splitQualName buf len True
prefixqconsym buf len = ITprefixqconsym $! splitQualName buf len True
qvarsym buf len = ITqvarsym $! splitQualName buf len False
qconsym buf len = ITqconsym $! splitQualName buf len False
prefixqvarsym buf len = ITprefixqvarsym $! splitQualName buf len True
prefixqconsym buf len = ITprefixqconsym $! splitQualName buf len True
+varsym, consym :: Action
varsym = sym ITvarsym
consym = sym ITconsym
varsym = sym ITvarsym
consym = sym ITconsym
+sym :: (FastString -> Token) -> SrcSpan -> StringBuffer -> Int
+ -> P (Located Token)
sym con span buf len =
case lookupUFM reservedSymsFM fs of
Just (keyword,exts) -> do
sym con span buf len =
case lookupUFM reservedSymsFM fs of
Just (keyword,exts) -> do
@@
-1039,16
+1059,27
@@
tok_integral itint transint transbuf translen (radix,char_to_int) span buf len =
(offsetBytes transbuf buf) (subtract translen len) radix char_to_int
-- some conveniences for use with tok_integral
(offsetBytes transbuf buf) (subtract translen len) radix char_to_int
-- some conveniences for use with tok_integral
+tok_num :: (Integer -> Integer)
+ -> Int -> Int
+ -> (Integer, (Char->Int)) -> Action
tok_num = tok_integral ITinteger
tok_num = tok_integral ITinteger
+tok_primint :: (Integer -> Integer)
+ -> Int -> Int
+ -> (Integer, (Char->Int)) -> Action
tok_primint = tok_integral ITprimint
tok_primint = tok_integral ITprimint
+tok_primword :: Int -> Int
+ -> (Integer, (Char->Int)) -> Action
tok_primword = tok_integral ITprimword positive
tok_primword = tok_integral ITprimword positive
+positive, negative :: (Integer -> Integer)
positive = id
negative = negate
positive = id
negative = negate
+decimal, octal, hexadecimal :: (Integer, Char -> Int)
decimal = (10,octDecDigit)
octal = (8,octDecDigit)
hexadecimal = (16,hexDigit)
-- readRational can understand negative rationals, exponents, everything.
decimal = (10,octDecDigit)
octal = (8,octDecDigit)
hexadecimal = (16,hexDigit)
-- readRational can understand negative rationals, exponents, everything.
+tok_float, tok_primfloat, tok_primdouble :: String -> Token
tok_float str = ITrational $! readRational str
tok_primfloat str = ITprimfloat $! readRational str
tok_primdouble str = ITprimdouble $! readRational str
tok_float str = ITrational $! readRational str
tok_primfloat str = ITprimfloat $! readRational str
tok_primdouble str = ITprimdouble $! readRational str
@@
-1076,6
+1107,7
@@
do_bol span _str _len = do
-- certain keywords put us in the "layout" state, where we might
-- add an opening curly brace.
-- certain keywords put us in the "layout" state, where we might
-- add an opening curly brace.
+maybe_layout :: Token -> P ()
maybe_layout ITdo = pushLexState layout_do
maybe_layout ITmdo = pushLexState layout_do
maybe_layout ITof = pushLexState layout
maybe_layout ITdo = pushLexState layout_do
maybe_layout ITmdo = pushLexState layout_do
maybe_layout ITof = pushLexState layout
@@
-1093,6
+1125,7
@@
maybe_layout _ = return ()
-- by a 'do', then we allow the new context to be at the same indentation as
-- the previous context. This is what the 'strict' argument is for.
--
-- by a 'do', then we allow the new context to be at the same indentation as
-- the previous context. This is what the 'strict' argument is for.
--
+new_layout_context :: Bool -> Action
new_layout_context strict span _buf _len = do
popLexState
(AI _ offset _) <- getInput
new_layout_context strict span _buf _len = do
popLexState
(AI _ offset _) <- getInput
@@
-1109,6
+1142,7
@@
new_layout_context strict span _buf _len = do
setContext (Layout offset : ctx)
return (L span ITvocurly)
setContext (Layout offset : ctx)
return (L span ITvocurly)
+do_layout_left :: Action
do_layout_left span _buf _len = do
popLexState
pushLexState bol -- we must be at the start of a line
do_layout_left span _buf _len = do
popLexState
pushLexState bol -- we must be at the start of a line
@@
-1208,6
+1242,7
@@
lex_string s = do
c' <- lex_char c i
lex_string (c':s)
c' <- lex_char c i
lex_string (c':s)
+lex_stringgap :: String -> P Token
lex_stringgap s = do
c <- getCharOrFail
case c of
lex_stringgap s = do
c <- getCharOrFail
case c of
@@
-1283,6
+1318,7
@@
lex_char c inp = do
c | isAny c -> do setInput inp; return c
_other -> lit_error
c | isAny c -> do setInput inp; return c
_other -> lit_error
+isAny :: Char -> Bool
isAny c | c > '\x7f' = isPrint c
| otherwise = is_any c
isAny c | c > '\x7f' = isPrint c
| otherwise = is_any c
@@
-1336,6
+1372,7
@@
readNum is_digit base conv = do
then readNum2 is_digit base conv (conv c)
else do setInput i; lit_error
then readNum2 is_digit base conv (conv c)
else do setInput i; lit_error
+readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> P Char
readNum2 is_digit base conv i = do
input <- getInput
read i input
readNum2 is_digit base conv i = do
input <- getInput
read i input
@@
-1348,6
+1385,7
@@
readNum2 is_digit base conv i = do
then do setInput input; return (chr i)
else lit_error
then do setInput input; return (chr i)
else lit_error
+silly_escape_chars :: [(String, Char)]
silly_escape_chars = [
("NUL", '\NUL'),
("SOH", '\SOH'),
silly_escape_chars = [
("NUL", '\NUL'),
("SOH", '\SOH'),
@@
-1389,6
+1427,7
@@
silly_escape_chars = [
-- the position of the error in the buffer. This is so that we can report
-- a correct location to the user, but also so we can detect UTF-8 decoding
-- errors if they occur.
-- the position of the error in the buffer. This is so that we can report
-- a correct location to the user, but also so we can detect UTF-8 decoding
-- errors if they occur.
+lit_error :: P a
lit_error = lexError "lexical error in string/character literal"
getCharOrFail :: P Char
lit_error = lexError "lexical error in string/character literal"
getCharOrFail :: P Char
@@
-1626,53
+1665,89
@@
getLexState = P $ \s@PState{ lex_state=ls:_ } -> POk s ls
-- -fglasgow-exts or -XParr) are represented by a bitmap stored in an unboxed
-- integer
-- -fglasgow-exts or -XParr) are represented by a bitmap stored in an unboxed
-- integer
-genericsBit, ffiBit, parrBit :: Int
+genericsBit :: Int
genericsBit = 0 -- {| and |}
genericsBit = 0 -- {| and |}
+ffiBit :: Int
ffiBit = 1
ffiBit = 1
+parrBit :: Int
parrBit = 2
parrBit = 2
+arrowsBit :: Int
arrowsBit = 4
arrowsBit = 4
+thBit :: Int
thBit = 5
thBit = 5
+ipBit :: Int
ipBit = 6
ipBit = 6
+explicitForallBit :: Int
explicitForallBit = 7 -- the 'forall' keyword and '.' symbol
explicitForallBit = 7 -- the 'forall' keyword and '.' symbol
+bangPatBit :: Int
bangPatBit = 8 -- Tells the parser to understand bang-patterns
-- (doesn't affect the lexer)
bangPatBit = 8 -- Tells the parser to understand bang-patterns
-- (doesn't affect the lexer)
+tyFamBit :: Int
tyFamBit = 9 -- indexed type families: 'family' keyword and kind sigs
tyFamBit = 9 -- indexed type families: 'family' keyword and kind sigs
+haddockBit :: Int
haddockBit = 10 -- Lex and parse Haddock comments
haddockBit = 10 -- Lex and parse Haddock comments
+magicHashBit :: Int
magicHashBit = 11 -- "#" in both functions and operators
magicHashBit = 11 -- "#" in both functions and operators
+kindSigsBit :: Int
kindSigsBit = 12 -- Kind signatures on type variables
kindSigsBit = 12 -- Kind signatures on type variables
+recursiveDoBit :: Int
recursiveDoBit = 13 -- mdo
recursiveDoBit = 13 -- mdo
+unicodeSyntaxBit :: Int
unicodeSyntaxBit = 14 -- the forall symbol, arrow symbols, etc
unicodeSyntaxBit = 14 -- the forall symbol, arrow symbols, etc
+unboxedTuplesBit :: Int
unboxedTuplesBit = 15 -- (# and #)
unboxedTuplesBit = 15 -- (# and #)
+standaloneDerivingBit :: Int
standaloneDerivingBit = 16 -- standalone instance deriving declarations
standaloneDerivingBit = 16 -- standalone instance deriving declarations
+transformComprehensionsBit :: Int
transformComprehensionsBit = 17
transformComprehensionsBit = 17
+qqBit :: Int
qqBit = 18 -- enable quasiquoting
qqBit = 18 -- enable quasiquoting
+inRulePragBit :: Int
inRulePragBit = 19
inRulePragBit = 19
+rawTokenStreamBit :: Int
rawTokenStreamBit = 20 -- producing a token stream with all comments included
rawTokenStreamBit = 20 -- producing a token stream with all comments included
+newQualOpsBit :: Int
newQualOpsBit = 21 -- Haskell' qualified operator syntax, e.g. Prelude.(+)
newQualOpsBit = 21 -- Haskell' qualified operator syntax, e.g. Prelude.(+)
-genericsEnabled, ffiEnabled, parrEnabled :: Int -> Bool
+always :: Int -> Bool
always _ = True
always _ = True
+genericsEnabled :: Int -> Bool
genericsEnabled flags = testBit flags genericsBit
genericsEnabled flags = testBit flags genericsBit
-ffiEnabled flags = testBit flags ffiBit
+parrEnabled :: Int -> Bool
parrEnabled flags = testBit flags parrBit
parrEnabled flags = testBit flags parrBit
+arrowsEnabled :: Int -> Bool
arrowsEnabled flags = testBit flags arrowsBit
arrowsEnabled flags = testBit flags arrowsBit
+thEnabled :: Int -> Bool
thEnabled flags = testBit flags thBit
thEnabled flags = testBit flags thBit
+ipEnabled :: Int -> Bool
ipEnabled flags = testBit flags ipBit
ipEnabled flags = testBit flags ipBit
+explicitForallEnabled :: Int -> Bool
explicitForallEnabled flags = testBit flags explicitForallBit
explicitForallEnabled flags = testBit flags explicitForallBit
+bangPatEnabled :: Int -> Bool
bangPatEnabled flags = testBit flags bangPatBit
bangPatEnabled flags = testBit flags bangPatBit
-tyFamEnabled flags = testBit flags tyFamBit
+-- tyFamEnabled :: Int -> Bool
+-- tyFamEnabled flags = testBit flags tyFamBit
+haddockEnabled :: Int -> Bool
haddockEnabled flags = testBit flags haddockBit
haddockEnabled flags = testBit flags haddockBit
+magicHashEnabled :: Int -> Bool
magicHashEnabled flags = testBit flags magicHashBit
magicHashEnabled flags = testBit flags magicHashBit
-kindSigsEnabled flags = testBit flags kindSigsBit
-recursiveDoEnabled flags = testBit flags recursiveDoBit
+-- kindSigsEnabled :: Int -> Bool
+-- kindSigsEnabled flags = testBit flags kindSigsBit
+unicodeSyntaxEnabled :: Int -> Bool
unicodeSyntaxEnabled flags = testBit flags unicodeSyntaxBit
unicodeSyntaxEnabled flags = testBit flags unicodeSyntaxBit
+unboxedTuplesEnabled :: Int -> Bool
unboxedTuplesEnabled flags = testBit flags unboxedTuplesBit
unboxedTuplesEnabled flags = testBit flags unboxedTuplesBit
+standaloneDerivingEnabled :: Int -> Bool
standaloneDerivingEnabled flags = testBit flags standaloneDerivingBit
standaloneDerivingEnabled flags = testBit flags standaloneDerivingBit
-transformComprehensionsEnabled flags = testBit flags transformComprehensionsBit
+qqEnabled :: Int -> Bool
qqEnabled flags = testBit flags qqBit
qqEnabled flags = testBit flags qqBit
-inRulePrag flags = testBit flags inRulePragBit
+-- inRulePrag :: Int -> Bool
+-- inRulePrag flags = testBit flags inRulePragBit
+rawTokenStreamEnabled :: Int -> Bool
rawTokenStreamEnabled flags = testBit flags rawTokenStreamBit
rawTokenStreamEnabled flags = testBit flags rawTokenStreamBit
+newQualOps :: Int -> Bool
newQualOps flags = testBit flags newQualOpsBit
newQualOps flags = testBit flags newQualOpsBit
+oldQualOps :: Int -> Bool
oldQualOps flags = not (newQualOps flags)
-- PState for parsing options pragmas
oldQualOps flags = not (newQualOps flags)
-- PState for parsing options pragmas
@@
-1844,6
+1919,7
@@
lexToken = do
span `seq` setLastToken span bytes bytes
t span buf bytes
span `seq` setLastToken span bytes bytes
t span buf bytes
+reportLexError :: SrcLoc -> SrcLoc -> StringBuffer -> [Char] -> P a
reportLexError loc1 loc2 buf str
| atEnd buf = failLocMsgP loc1 loc2 (str ++ " at end of input")
| otherwise =
reportLexError loc1 loc2 buf str
| atEnd buf = failLocMsgP loc1 loc2 (str ++ " at end of input")
| otherwise =