#[macro_use]
use corollary_support::*;
use data::position::*;
use syntax::constants::*;
use data::ident::Ident;
#[derive(Clone, Debug)]
pub enum CToken {
CTokLParen(PosLength),
CTokRParen(PosLength),
CTokLBracket(PosLength),
CTokRBracket(PosLength),
CTokArrow(PosLength),
CTokDot(PosLength),
CTokExclam(PosLength),
CTokTilde(PosLength),
CTokInc(PosLength),
CTokDec(PosLength),
CTokPlus(PosLength),
CTokMinus(PosLength),
CTokStar(PosLength),
CTokSlash(PosLength),
CTokPercent(PosLength),
CTokAmper(PosLength),
CTokShiftL(PosLength),
CTokShiftR(PosLength),
CTokLess(PosLength),
CTokLessEq(PosLength),
CTokHigh(PosLength),
CTokHighEq(PosLength),
CTokEqual(PosLength),
CTokUnequal(PosLength),
CTokHat(PosLength),
CTokBar(PosLength),
CTokAnd(PosLength),
CTokOr(PosLength),
CTokQuest(PosLength),
CTokColon(PosLength),
CTokAssign(PosLength),
CTokPlusAss(PosLength),
CTokMinusAss(PosLength),
CTokStarAss(PosLength),
CTokSlashAss(PosLength),
CTokPercAss(PosLength),
CTokAmpAss(PosLength),
CTokHatAss(PosLength),
CTokBarAss(PosLength),
CTokSLAss(PosLength),
CTokSRAss(PosLength),
CTokComma(PosLength),
CTokSemic(PosLength),
CTokLBrace(PosLength),
CTokRBrace(PosLength),
CTokEllipsis(PosLength),
CTokAlignof(PosLength),
CTokAlignas(PosLength),
CTokAsm(PosLength),
CTokAtomic(PosLength),
CTokAuto(PosLength),
CTokBreak(PosLength),
CTokBool(PosLength),
CTokCase(PosLength),
CTokChar(PosLength),
CTokConst(PosLength),
CTokContinue(PosLength),
CTokComplex(PosLength),
CTokDefault(PosLength),
CTokDo(PosLength),
CTokDouble(PosLength),
CTokElse(PosLength),
CTokEnum(PosLength),
CTokExtern(PosLength),
CTokFloat(PosLength),
CTokFor(PosLength),
CTokGeneric(PosLength),
CTokGoto(PosLength),
CTokIf(PosLength),
CTokInline(PosLength),
CTokInt(PosLength),
CTokInt128(PosLength),
CTokLong(PosLength),
CTokLabel(PosLength),
CTokNoreturn(PosLength),
CTokNullable(PosLength),
CTokNonnull(PosLength),
CTokRegister(PosLength),
CTokRestrict(PosLength),
CTokReturn(PosLength),
CTokShort(PosLength),
CTokSigned(PosLength),
CTokSizeof(PosLength),
CTokStatic(PosLength),
CTokStaticAssert(PosLength),
CTokStruct(PosLength),
CTokSwitch(PosLength),
CTokTypedef(PosLength),
CTokTypeof(PosLength),
CTokThread(PosLength),
CTokUnion(PosLength),
CTokUnsigned(PosLength),
CTokVoid(PosLength),
CTokVolatile(PosLength),
CTokWhile(PosLength),
CTokCLit(PosLength, CChar),
CTokILit(PosLength, CInteger),
CTokFLit(PosLength, CFloat),
CTokSLit(PosLength, CString),
CTokIdent(PosLength, Ident),
CTokTyIdent(PosLength, Ident),
CTokGnuC(GnuCTok, PosLength),
CTokClangC(PosLength, ClangCTok),
CTokEof,
}
pub use self::CToken::*;
impl Pos for CToken {
fn pos(&self) -> &Position {
&posLenOfTok(self).0
}
fn into_pos(self) -> Position {
movePosLenOfTok(self).0
}
}
use std::fmt::{self, Display, Formatter};
impl Display for CToken {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
#[derive(Clone, Debug)]
pub enum GnuCTok {
GnuCAttrTok,
GnuCExtTok,
GnuCVaArg,
GnuCOffsetof,
GnuCTyCompat,
GnuCComplexReal,
GnuCComplexImag,
}
pub use self::GnuCTok::*;
#[derive(Clone, Debug)]
pub struct ClangCTok(pub ClangCVersion);
pub type ClangCVersionTok = ClangCTok;
pub fn posLenOfTok(tok: &CToken) -> &(Position, isize) {
match *tok {
CTokLParen(ref pos) => pos,
CTokRParen(ref pos) => pos,
CTokLBracket(ref pos) => pos,
CTokRBracket(ref pos) => pos,
CTokArrow(ref pos) => pos,
CTokDot(ref pos) => pos,
CTokExclam(ref pos) => pos,
CTokTilde(ref pos) => pos,
CTokInc(ref pos) => pos,
CTokDec(ref pos) => pos,
CTokPlus(ref pos) => pos,
CTokMinus(ref pos) => pos,
CTokStar(ref pos) => pos,
CTokSlash(ref pos) => pos,
CTokPercent(ref pos) => pos,
CTokAmper(ref pos) => pos,
CTokShiftL(ref pos) => pos,
CTokShiftR(ref pos) => pos,
CTokLess(ref pos) => pos,
CTokLessEq(ref pos) => pos,
CTokHigh(ref pos) => pos,
CTokHighEq(ref pos) => pos,
CTokEqual(ref pos) => pos,
CTokUnequal(ref pos) => pos,
CTokHat(ref pos) => pos,
CTokBar(ref pos) => pos,
CTokAnd(ref pos) => pos,
CTokOr(ref pos) => pos,
CTokQuest(ref pos) => pos,
CTokColon(ref pos) => pos,
CTokAssign(ref pos) => pos,
CTokPlusAss(ref pos) => pos,
CTokMinusAss(ref pos) => pos,
CTokStarAss(ref pos) => pos,
CTokSlashAss(ref pos) => pos,
CTokPercAss(ref pos) => pos,
CTokAmpAss(ref pos) => pos,
CTokHatAss(ref pos) => pos,
CTokBarAss(ref pos) => pos,
CTokSLAss(ref pos) => pos,
CTokSRAss(ref pos) => pos,
CTokComma(ref pos) => pos,
CTokSemic(ref pos) => pos,
CTokLBrace(ref pos) => pos,
CTokRBrace(ref pos) => pos,
CTokEllipsis(ref pos) => pos,
CTokAlignof(ref pos) => pos,
CTokAlignas(ref pos) => pos,
CTokAsm(ref pos) => pos,
CTokAtomic(ref pos) => pos,
CTokAuto(ref pos) => pos,
CTokBreak(ref pos) => pos,
CTokBool(ref pos) => pos,
CTokCase(ref pos) => pos,
CTokChar(ref pos) => pos,
CTokConst(ref pos) => pos,
CTokContinue(ref pos) => pos,
CTokComplex(ref pos) => pos,
CTokDefault(ref pos) => pos,
CTokDo(ref pos) => pos,
CTokDouble(ref pos) => pos,
CTokElse(ref pos) => pos,
CTokEnum(ref pos) => pos,
CTokExtern(ref pos) => pos,
CTokFloat(ref pos) => pos,
CTokFor(ref pos) => pos,
CTokGeneric(ref pos) => pos,
CTokGoto(ref pos) => pos,
CTokInt(ref pos) => pos,
CTokInt128(ref pos) => pos,
CTokInline(ref pos) => pos,
CTokIf(ref pos) => pos,
CTokLong(ref pos) => pos,
CTokLabel(ref pos) => pos,
CTokNoreturn(ref pos) => pos,
CTokNullable(ref pos) => pos,
CTokNonnull(ref pos) => pos,
CTokRegister(ref pos) => pos,
CTokRestrict(ref pos) => pos,
CTokReturn(ref pos) => pos,
CTokShort(ref pos) => pos,
CTokSigned(ref pos) => pos,
CTokSizeof(ref pos) => pos,
CTokStatic(ref pos) => pos,
CTokStaticAssert(ref pos) => pos,
CTokStruct(ref pos) => pos,
CTokSwitch(ref pos) => pos,
CTokTypedef(ref pos) => pos,
CTokTypeof(ref pos) => pos,
CTokThread(ref pos) => pos,
CTokUnion(ref pos) => pos,
CTokUnsigned(ref pos) => pos,
CTokVoid(ref pos) => pos,
CTokVolatile(ref pos) => pos,
CTokWhile(ref pos) => pos,
CTokCLit(ref pos, _) => pos,
CTokILit(ref pos, _) => pos,
CTokFLit(ref pos, _) => pos,
CTokSLit(ref pos, _) => pos,
CTokIdent(ref pos, _) => pos,
CTokTyIdent(ref pos, _) => pos,
CTokGnuC(_, ref pos) => pos,
CTokClangC(ref pos, _) => pos,
CTokEof => panic!("tokenPos: Eof"),
}
}
pub fn movePosLenOfTok(tok: CToken) -> (Position, isize) {
match tok {
CTokLParen(pos) => pos,
CTokRParen(pos) => pos,
CTokLBracket(pos) => pos,
CTokRBracket(pos) => pos,
CTokArrow(pos) => pos,
CTokDot(pos) => pos,
CTokExclam(pos) => pos,
CTokTilde(pos) => pos,
CTokInc(pos) => pos,
CTokDec(pos) => pos,
CTokPlus(pos) => pos,
CTokMinus(pos) => pos,
CTokStar(pos) => pos,
CTokSlash(pos) => pos,
CTokPercent(pos) => pos,
CTokAmper(pos) => pos,
CTokShiftL(pos) => pos,
CTokShiftR(pos) => pos,
CTokLess(pos) => pos,
CTokLessEq(pos) => pos,
CTokHigh(pos) => pos,
CTokHighEq(pos) => pos,
CTokEqual(pos) => pos,
CTokUnequal(pos) => pos,
CTokHat(pos) => pos,
CTokBar(pos) => pos,
CTokAnd(pos) => pos,
CTokOr(pos) => pos,
CTokQuest(pos) => pos,
CTokColon(pos) => pos,
CTokAssign(pos) => pos,
CTokPlusAss(pos) => pos,
CTokMinusAss(pos) => pos,
CTokStarAss(pos) => pos,
CTokSlashAss(pos) => pos,
CTokPercAss(pos) => pos,
CTokAmpAss(pos) => pos,
CTokHatAss(pos) => pos,
CTokBarAss(pos) => pos,
CTokSLAss(pos) => pos,
CTokSRAss(pos) => pos,
CTokComma(pos) => pos,
CTokSemic(pos) => pos,
CTokLBrace(pos) => pos,
CTokRBrace(pos) => pos,
CTokEllipsis(pos) => pos,
CTokAlignof(pos) => pos,
CTokAlignas(pos) => pos,
CTokAsm(pos) => pos,
CTokAtomic(pos) => pos,
CTokAuto(pos) => pos,
CTokBreak(pos) => pos,
CTokBool(pos) => pos,
CTokCase(pos) => pos,
CTokChar(pos) => pos,
CTokConst(pos) => pos,
CTokContinue(pos) => pos,
CTokComplex(pos) => pos,
CTokDefault(pos) => pos,
CTokDo(pos) => pos,
CTokDouble(pos) => pos,
CTokElse(pos) => pos,
CTokEnum(pos) => pos,
CTokExtern(pos) => pos,
CTokFloat(pos) => pos,
CTokFor(pos) => pos,
CTokGeneric(pos) => pos,
CTokGoto(pos) => pos,
CTokInt(pos) => pos,
CTokInt128(pos) => pos,
CTokInline(pos) => pos,
CTokIf(pos) => pos,
CTokLong(pos) => pos,
CTokLabel(pos) => pos,
CTokNoreturn(pos) => pos,
CTokNullable(pos) => pos,
CTokNonnull(pos) => pos,
CTokRegister(pos) => pos,
CTokRestrict(pos) => pos,
CTokReturn(pos) => pos,
CTokShort(pos) => pos,
CTokSigned(pos) => pos,
CTokSizeof(pos) => pos,
CTokStatic(pos) => pos,
CTokStaticAssert(pos) => pos,
CTokStruct(pos) => pos,
CTokSwitch(pos) => pos,
CTokTypedef(pos) => pos,
CTokTypeof(pos) => pos,
CTokThread(pos) => pos,
CTokUnion(pos) => pos,
CTokUnsigned(pos) => pos,
CTokVoid(pos) => pos,
CTokVolatile(pos) => pos,
CTokWhile(pos) => pos,
CTokCLit(pos, _) => pos,
CTokILit(pos, _) => pos,
CTokFLit(pos, _) => pos,
CTokSLit(pos, _) => pos,
CTokIdent(pos, _) => pos,
CTokTyIdent(pos, _) => pos,
CTokGnuC(_, pos) => pos,
CTokClangC(pos, _) => pos,
CTokEof => panic!("tokenPos: Eof"),
}
}