module CTokens (CToken(..), GnuCTok(..)) where
import Position (Position(..), Pos(posOf))
import Idents (Ident, identToLexeme)
data CToken = CTokLParen !Position
| CTokRParen !Position
| CTokLBracket !Position
| CTokRBracket !Position
| CTokArrow !Position
| CTokDot !Position
| CTokExclam !Position
| CTokTilde !Position
| CTokInc !Position
| CTokDec !Position
| CTokPlus !Position
| CTokMinus !Position
| CTokStar !Position
| CTokSlash !Position
| CTokPercent !Position
| CTokAmper !Position
| CTokShiftL !Position
| CTokShiftR !Position
| CTokLess !Position
| CTokLessEq !Position
| CTokHigh !Position
| CTokHighEq !Position
| CTokEqual !Position
| CTokUnequal !Position
| CTokHat !Position
| CTokBar !Position
| CTokAnd !Position
| CTokOr !Position
| CTokQuest !Position
| CTokColon !Position
| CTokAssign !Position
| CTokPlusAss !Position
| CTokMinusAss !Position
| CTokStarAss !Position
| CTokSlashAss !Position
| CTokPercAss !Position
| CTokAmpAss !Position
| CTokHatAss !Position
| CTokBarAss !Position
| CTokSLAss !Position
| CTokSRAss !Position
| CTokComma !Position
| CTokSemic !Position
| CTokLBrace !Position
| CTokRBrace !Position
| CTokEllipsis !Position
| CTokAlignof !Position
| CTokAsm !Position
| CTokAuto !Position
| CTokBreak !Position
| CTokBool !Position
| CTokCase !Position
| CTokChar !Position
| CTokConst !Position
| CTokContinue !Position
| CTokComplex !Position
| CTokDefault !Position
| CTokDo !Position
| CTokDouble !Position
| CTokElse !Position
| CTokEnum !Position
| CTokExtern !Position
| CTokFloat !Position
| CTokFloat128 !Position
| CTokFor !Position
| CTokGoto !Position
| CTokIf !Position
| CTokInline !Position
| CTokInt !Position
| CTokLong !Position
| CTokLabel !Position
| CTokRegister !Position
| CTokRestrict !Position
| CTokReturn !Position
| CTokShort !Position
| CTokSigned !Position
| CTokSizeof !Position
| CTokStatic !Position
| CTokStruct !Position
| CTokSwitch !Position
| CTokTypedef !Position
| CTokTypeof !Position
| CTokThread !Position
| CTokUnion !Position
| CTokUnsigned !Position
| CTokVoid !Position
| CTokVolatile !Position
| CTokWhile !Position
| CTokCLit !Position !Char
| CTokILit !Position !Integer
| CTokFLit !Position String
| CTokSLit !Position String
| CTokIdent !Position !Ident
| CTokTyIdent !Position !Ident
| CTokGnuC !GnuCTok !Position
| CTokEof
data GnuCTok = GnuCAttrTok
| GnuCExtTok
| GnuCVaArg
| GnuCOffsetof
| GnuCTyCompat
instance Pos CToken where
posOf :: CToken -> Position
posOf (CTokLParen pos :: Position
pos ) = Position
pos
posOf (CTokRParen pos :: Position
pos ) = Position
pos
posOf (CTokLBracket pos :: Position
pos ) = Position
pos
posOf (CTokRBracket pos :: Position
pos ) = Position
pos
posOf (CTokArrow pos :: Position
pos ) = Position
pos
posOf (CTokDot pos :: Position
pos ) = Position
pos
posOf (CTokExclam pos :: Position
pos ) = Position
pos
posOf (CTokTilde pos :: Position
pos ) = Position
pos
posOf (CTokInc pos :: Position
pos ) = Position
pos
posOf (CTokDec pos :: Position
pos ) = Position
pos
posOf (CTokPlus pos :: Position
pos ) = Position
pos
posOf (CTokMinus pos :: Position
pos ) = Position
pos
posOf (CTokStar pos :: Position
pos ) = Position
pos
posOf (CTokSlash pos :: Position
pos ) = Position
pos
posOf (CTokPercent pos :: Position
pos ) = Position
pos
posOf (CTokAmper pos :: Position
pos ) = Position
pos
posOf (CTokShiftL pos :: Position
pos ) = Position
pos
posOf (CTokShiftR pos :: Position
pos ) = Position
pos
posOf (CTokLess pos :: Position
pos ) = Position
pos
posOf (CTokLessEq pos :: Position
pos ) = Position
pos
posOf (CTokHigh pos :: Position
pos ) = Position
pos
posOf (CTokHighEq pos :: Position
pos ) = Position
pos
posOf (CTokEqual pos :: Position
pos ) = Position
pos
posOf (CTokUnequal pos :: Position
pos ) = Position
pos
posOf (CTokHat pos :: Position
pos ) = Position
pos
posOf (CTokBar pos :: Position
pos ) = Position
pos
posOf (CTokAnd pos :: Position
pos ) = Position
pos
posOf (CTokOr pos :: Position
pos ) = Position
pos
posOf (CTokQuest pos :: Position
pos ) = Position
pos
posOf (CTokColon pos :: Position
pos ) = Position
pos
posOf (CTokAssign pos :: Position
pos ) = Position
pos
posOf (CTokPlusAss pos :: Position
pos ) = Position
pos
posOf (CTokMinusAss pos :: Position
pos ) = Position
pos
posOf (CTokStarAss pos :: Position
pos ) = Position
pos
posOf (CTokSlashAss pos :: Position
pos ) = Position
pos
posOf (CTokPercAss pos :: Position
pos ) = Position
pos
posOf (CTokAmpAss pos :: Position
pos ) = Position
pos
posOf (CTokHatAss pos :: Position
pos ) = Position
pos
posOf (CTokBarAss pos :: Position
pos ) = Position
pos
posOf (CTokSLAss pos :: Position
pos ) = Position
pos
posOf (CTokSRAss pos :: Position
pos ) = Position
pos
posOf (CTokComma pos :: Position
pos ) = Position
pos
posOf (CTokSemic pos :: Position
pos ) = Position
pos
posOf (CTokLBrace pos :: Position
pos ) = Position
pos
posOf (CTokRBrace pos :: Position
pos ) = Position
pos
posOf (CTokEllipsis pos :: Position
pos ) = Position
pos
posOf (CTokAlignof pos :: Position
pos ) = Position
pos
posOf (CTokAsm pos :: Position
pos ) = Position
pos
posOf (CTokAuto pos :: Position
pos ) = Position
pos
posOf (CTokBreak pos :: Position
pos ) = Position
pos
posOf (CTokBool pos :: Position
pos ) = Position
pos
posOf (CTokCase pos :: Position
pos ) = Position
pos
posOf (CTokChar pos :: Position
pos ) = Position
pos
posOf (CTokConst pos :: Position
pos ) = Position
pos
posOf (CTokContinue pos :: Position
pos ) = Position
pos
posOf (CTokComplex pos :: Position
pos ) = Position
pos
posOf (CTokDefault pos :: Position
pos ) = Position
pos
posOf (CTokDo pos :: Position
pos ) = Position
pos
posOf (CTokDouble pos :: Position
pos ) = Position
pos
posOf (CTokElse pos :: Position
pos ) = Position
pos
posOf (CTokEnum pos :: Position
pos ) = Position
pos
posOf (CTokExtern pos :: Position
pos ) = Position
pos
posOf (CTokFloat pos :: Position
pos ) = Position
pos
posOf (CTokFloat128 pos :: Position
pos ) = Position
pos
posOf (CTokFor pos :: Position
pos ) = Position
pos
posOf (CTokGoto pos :: Position
pos ) = Position
pos
posOf (CTokInt pos :: Position
pos ) = Position
pos
posOf (CTokInline pos :: Position
pos ) = Position
pos
posOf (CTokIf pos :: Position
pos ) = Position
pos
posOf (CTokLong pos :: Position
pos ) = Position
pos
posOf (CTokLabel pos :: Position
pos ) = Position
pos
posOf (CTokRegister pos :: Position
pos ) = Position
pos
posOf (CTokRestrict pos :: Position
pos ) = Position
pos
posOf (CTokReturn pos :: Position
pos ) = Position
pos
posOf (CTokShort pos :: Position
pos ) = Position
pos
posOf (CTokSigned pos :: Position
pos ) = Position
pos
posOf (CTokSizeof pos :: Position
pos ) = Position
pos
posOf (CTokStatic pos :: Position
pos ) = Position
pos
posOf (CTokStruct pos :: Position
pos ) = Position
pos
posOf (CTokSwitch pos :: Position
pos ) = Position
pos
posOf (CTokTypedef pos :: Position
pos ) = Position
pos
posOf (CTokTypeof pos :: Position
pos ) = Position
pos
posOf (CTokThread pos :: Position
pos ) = Position
pos
posOf (CTokUnion pos :: Position
pos ) = Position
pos
posOf (CTokUnsigned pos :: Position
pos ) = Position
pos
posOf (CTokVoid pos :: Position
pos ) = Position
pos
posOf (CTokVolatile pos :: Position
pos ) = Position
pos
posOf (CTokWhile pos :: Position
pos ) = Position
pos
posOf (CTokCLit pos :: Position
pos _) = Position
pos
posOf (CTokILit pos :: Position
pos _) = Position
pos
posOf (CTokFLit pos :: Position
pos _) = Position
pos
posOf (CTokSLit pos :: Position
pos _) = Position
pos
posOf (CTokIdent pos :: Position
pos _) = Position
pos
posOf (CTokTyIdent pos :: Position
pos _) = Position
pos
posOf (CTokGnuC _ pos :: Position
pos ) = Position
pos
instance Show CToken where
showsPrec :: Int -> CToken -> ShowS
showsPrec _ (CTokLParen _ ) = String -> ShowS
showString "("
showsPrec _ (CTokRParen _ ) = String -> ShowS
showString ")"
showsPrec _ (CTokLBracket _ ) = String -> ShowS
showString "["
showsPrec _ (CTokRBracket _ ) = String -> ShowS
showString "]"
showsPrec _ (CTokArrow _ ) = String -> ShowS
showString "->"
showsPrec _ (CTokDot _ ) = String -> ShowS
showString "."
showsPrec _ (CTokExclam _ ) = String -> ShowS
showString "!"
showsPrec _ (CTokTilde _ ) = String -> ShowS
showString "~"
showsPrec _ (CTokInc _ ) = String -> ShowS
showString "++"
showsPrec _ (CTokDec _ ) = String -> ShowS
showString "--"
showsPrec _ (CTokPlus _ ) = String -> ShowS
showString "+"
showsPrec _ (CTokMinus _ ) = String -> ShowS
showString "-"
showsPrec _ (CTokStar _ ) = String -> ShowS
showString "*"
showsPrec _ (CTokSlash _ ) = String -> ShowS
showString "/"
showsPrec _ (CTokPercent _ ) = String -> ShowS
showString "%"
showsPrec _ (CTokAmper _ ) = String -> ShowS
showString "&"
showsPrec _ (CTokShiftL _ ) = String -> ShowS
showString "<<"
showsPrec _ (CTokShiftR _ ) = String -> ShowS
showString ">>"
showsPrec _ (CTokLess _ ) = String -> ShowS
showString "<"
showsPrec _ (CTokLessEq _ ) = String -> ShowS
showString "<="
showsPrec _ (CTokHigh _ ) = String -> ShowS
showString ">"
showsPrec _ (CTokHighEq _ ) = String -> ShowS
showString ">="
showsPrec _ (CTokEqual _ ) = String -> ShowS
showString "=="
showsPrec _ (CTokUnequal _ ) = String -> ShowS
showString "!="
showsPrec _ (CTokHat _ ) = String -> ShowS
showString "^"
showsPrec _ (CTokBar _ ) = String -> ShowS
showString "|"
showsPrec _ (CTokAnd _ ) = String -> ShowS
showString "&&"
showsPrec _ (CTokOr _ ) = String -> ShowS
showString "||"
showsPrec _ (CTokQuest _ ) = String -> ShowS
showString "?"
showsPrec _ (CTokColon _ ) = String -> ShowS
showString ":"
showsPrec _ (CTokAssign _ ) = String -> ShowS
showString "="
showsPrec _ (CTokPlusAss _ ) = String -> ShowS
showString "+="
showsPrec _ (CTokMinusAss _ ) = String -> ShowS
showString "-="
showsPrec _ (CTokStarAss _ ) = String -> ShowS
showString "*="
showsPrec _ (CTokSlashAss _ ) = String -> ShowS
showString "/="
showsPrec _ (CTokPercAss _ ) = String -> ShowS
showString "%="
showsPrec _ (CTokAmpAss _ ) = String -> ShowS
showString "&="
showsPrec _ (CTokHatAss _ ) = String -> ShowS
showString "^="
showsPrec _ (CTokBarAss _ ) = String -> ShowS
showString "|="
showsPrec _ (CTokSLAss _ ) = String -> ShowS
showString "<<="
showsPrec _ (CTokSRAss _ ) = String -> ShowS
showString ">>="
showsPrec _ (CTokComma _ ) = String -> ShowS
showString ","
showsPrec _ (CTokSemic _ ) = String -> ShowS
showString ";"
showsPrec _ (CTokLBrace _ ) = String -> ShowS
showString "{"
showsPrec _ (CTokRBrace _ ) = String -> ShowS
showString "}"
showsPrec _ (CTokEllipsis _ ) = String -> ShowS
showString "..."
showsPrec _ (CTokAlignof _ ) = String -> ShowS
showString "alignof"
showsPrec _ (CTokAsm _ ) = String -> ShowS
showString "asm"
showsPrec _ (CTokAuto _ ) = String -> ShowS
showString "auto"
showsPrec _ (CTokBreak _ ) = String -> ShowS
showString "break"
showsPrec _ (CTokCase _ ) = String -> ShowS
showString "case"
showsPrec _ (CTokChar _ ) = String -> ShowS
showString "char"
showsPrec _ (CTokConst _ ) = String -> ShowS
showString "const"
showsPrec _ (CTokContinue _ ) = String -> ShowS
showString "continue"
showsPrec _ (CTokDefault _ ) = String -> ShowS
showString "default"
showsPrec _ (CTokDouble _ ) = String -> ShowS
showString "double"
showsPrec _ (CTokDo _ ) = String -> ShowS
showString "do"
showsPrec _ (CTokElse _ ) = String -> ShowS
showString "else"
showsPrec _ (CTokEnum _ ) = String -> ShowS
showString "enum"
showsPrec _ (CTokExtern _ ) = String -> ShowS
showString "extern"
showsPrec _ (CTokFloat _ ) = String -> ShowS
showString "float"
showsPrec _ (CTokFloat128 _ ) = String -> ShowS
showString "__float128"
showsPrec _ (CTokFor _ ) = String -> ShowS
showString "for"
showsPrec _ (CTokGoto _ ) = String -> ShowS
showString "goto"
showsPrec _ (CTokIf _ ) = String -> ShowS
showString "if"
showsPrec _ (CTokInline _ ) = String -> ShowS
showString "inline"
showsPrec _ (CTokInt _ ) = String -> ShowS
showString "int"
showsPrec _ (CTokLong _ ) = String -> ShowS
showString "long"
showsPrec _ (CTokLabel _ ) = String -> ShowS
showString "__label__"
showsPrec _ (CTokRegister _ ) = String -> ShowS
showString "register"
showsPrec _ (CTokRestrict _ ) = String -> ShowS
showString "restrict"
showsPrec _ (CTokReturn _ ) = String -> ShowS
showString "return"
showsPrec _ (CTokShort _ ) = String -> ShowS
showString "short"
showsPrec _ (CTokSigned _ ) = String -> ShowS
showString "signed"
showsPrec _ (CTokSizeof _ ) = String -> ShowS
showString "sizeof"
showsPrec _ (CTokStatic _ ) = String -> ShowS
showString "static"
showsPrec _ (CTokStruct _ ) = String -> ShowS
showString "struct"
showsPrec _ (CTokSwitch _ ) = String -> ShowS
showString "switch"
showsPrec _ (CTokTypedef _ ) = String -> ShowS
showString "typedef"
showsPrec _ (CTokTypeof _ ) = String -> ShowS
showString "typeof"
showsPrec _ (CTokThread _ ) = String -> ShowS
showString "__thread"
showsPrec _ (CTokUnion _ ) = String -> ShowS
showString "union"
showsPrec _ (CTokUnsigned _ ) = String -> ShowS
showString "unsigned"
showsPrec _ (CTokVoid _ ) = String -> ShowS
showString "void"
showsPrec _ (CTokVolatile _ ) = String -> ShowS
showString "volatile"
showsPrec _ (CTokWhile _ ) = String -> ShowS
showString "while"
showsPrec _ (CTokCLit _ c :: Char
c) = Char -> ShowS
showChar Char
c
showsPrec _ (CTokILit _ i :: Integer
i) = (String -> ShowS
showString (String -> ShowS) -> (Integer -> String) -> Integer -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> String
forall a. Show a => a -> String
show) Integer
i
showsPrec _ (CTokFLit _ s :: String
s) = String -> ShowS
showString String
s
showsPrec _ (CTokSLit _ s :: String
s) = String -> ShowS
showString String
s
showsPrec _ (CTokIdent _ i :: Ident
i) = (String -> ShowS
showString (String -> ShowS) -> (Ident -> String) -> Ident -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ident -> String
identToLexeme) Ident
i
showsPrec _ (CTokTyIdent _ i :: Ident
i) = (String -> ShowS
showString (String -> ShowS) -> (Ident -> String) -> Ident -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ident -> String
identToLexeme) Ident
i
showsPrec _ (CTokGnuC GnuCAttrTok _) = String -> ShowS
showString "__attribute__"
showsPrec _ (CTokGnuC GnuCExtTok _) = String -> ShowS
showString "__extension__"
showsPrec _ (CTokGnuC GnuCVaArg _) = String -> ShowS
showString "__builtin_va_arg"
showsPrec _ (CTokGnuC GnuCOffsetof _) = String -> ShowS
showString "__builtin_offsetof"
showsPrec _ (CTokGnuC GnuCTyCompat _) = String -> ShowS
showString "__builtin_types_compatible_p"