The Backpack patch.
[ghc.git] / utils / genprimopcode / Lexer.x
index ac1ea95..ad2590b 100644 (file)
@@ -1,19 +1,20 @@
 
 {
-{-# OPTIONS -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
---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
--- for details
+-- See Note [Warnings in code generated by Alex] in compiler/parser/Lexer.x
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-tabs #-}
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 module Lexer (lex_tok) where
 
-import ParserM (ParserM (..), mkT, mkTv, Token(..), St, start_code,
+import ParserM (ParserM (..), mkT, mkTv, Token(..), start_code,
                 set_start_code,
                 inc_brace_depth, dec_brace_depth,
-                show_pos, position, input,
-                AlexInput, alexGetChar, alexInputPrevChar)
+                show_pos, position,
+                AlexInput, alexGetByte)
+import qualified ParserM as ParserM (input)
 }
 
 words :-
@@ -32,12 +33,17 @@ words :-
                                                }
                                     }
     <0>         "->"                { mkT TArrow }
+    <0>         "=>"                { mkT TDArrow }
     <0>         "="                 { mkT TEquals }
     <0>         ","                 { mkT TComma }
     <0>         "("                 { mkT TOpenParen }
     <0>         ")"                 { mkT TCloseParen }
     <0>         "(#"                { mkT TOpenParenHash }
     <0>         "#)"                { mkT THashCloseParen }
+    <0>         "["                 { mkT TOpenBracket }
+    <0>         "]"                 { mkT TCloseBracket }
+    <0>         "<"                 { mkT TOpenAngle }
+    <0>         ">"                 { mkT TCloseAngle }
     <0>         "section"           { mkT TSection }
     <0>         "primop"            { mkT TPrimop }
     <0>         "pseudoop"          { mkT TPseudoop }
@@ -50,9 +56,19 @@ words :-
     <0>         "Monadic"           { mkT TMonadic }
     <0>         "Compare"           { mkT TCompare }
     <0>         "GenPrimOp"         { mkT TGenPrimOp }
+    <0>         "fixity"            { mkT TFixity }
+    <0>         "infix"             { mkT TInfixN }
+    <0>         "infixl"            { mkT TInfixL }
+    <0>         "infixr"            { mkT TInfixR }
+    <0>         "Nothing"           { mkT TNothing }
+    <0>         "vector"            { mkT TVector }
     <0>         "thats_all_folks"   { mkT TThatsAllFolks }
+    <0>         "SCALAR"            { mkT TSCALAR }
+    <0>         "VECTOR"            { mkT TVECTOR }
+    <0>         "VECTUPLE"          { mkT TVECTUPLE }
     <0>         [a-z][a-zA-Z0-9\#_]* { mkTv TLowerName }
     <0>         [A-Z][a-zA-Z0-9\#_]* { mkTv TUpperName }
+    <0>         [0-9][0-9]*         { mkTv (TInteger . read) }
     <0>         \" [^\"]* \"        { mkTv (TString . tail . init) }
     <in_braces> [^\{\}]+            { mkTv TNoBraces }
     <in_braces> \n                  { mkTv TNoBraces }
@@ -65,7 +81,7 @@ get_tok = ParserM $ \i st ->
        AlexError _ -> Left ("Lexical error at " ++ show_pos (position i))
        AlexSkip i' _ -> case get_tok of
                             ParserM f -> f i' st
-       AlexToken i' l a -> case a $ take l $ input i of
+       AlexToken i' l a -> case a $ take l $ ParserM.input i of
                                ParserM f -> f i' st
 
 lex_tok :: (Token -> ParserM a) -> ParserM a