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