X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=lexer.h;h=83cb62470dc53f79a4da813ae1177f7f91091d80;hp=45b4ad214c04c7e8e3347eb82bac3ca698d46475;hb=db229b6f94175076dec1d105169aaf984db58f7d;hpb=d51a6ab3dbde97510d082e00cc7594dbd3f755f7 diff --git a/lexer.h b/lexer.h index 45b4ad2..83cb624 100644 --- a/lexer.h +++ b/lexer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 + * Copyright (C) 2012, 2013 * Wolfgang Bumiller * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -25,8 +25,6 @@ typedef struct token_s token; -#include "ast.h" - struct token_s { int ttype; @@ -76,6 +74,10 @@ enum { TOKEN_ATTRIBUTE_OPEN, /* [[ */ TOKEN_ATTRIBUTE_CLOSE, /* ]] */ + TOKEN_VA_ARGS, /* for the ftepp only */ + TOKEN_VA_ARGS_ARRAY, /* for the ftepp only */ + TOKEN_VA_COUNT, /* to get the count of vaargs */ + TOKEN_STRINGCONST, /* not the typename but an actual "string" */ TOKEN_CHARCONST, TOKEN_VECTORCONST, @@ -99,7 +101,7 @@ typedef struct { int value; } frame_macro; -typedef struct { +typedef struct lex_file_s { FILE *file; const char *open_string; size_t open_string_length; @@ -109,7 +111,7 @@ typedef struct { size_t line; size_t sline; /* line at the start of a token */ - char peek[256]; + int peek[256]; size_t peekpos; bool eof; @@ -183,6 +185,7 @@ static const oper_info c_operators[] = { { "%", 2, opid1('%'), ASSOC_LEFT, 13, 0 }, { "+", 2, opid1('+'), ASSOC_LEFT, 12, 0 }, + { "**", 2, opid2('*', '*'), ASSOC_RIGHT, 12, 0 }, { "-", 2, opid1('-'), ASSOC_LEFT, 12, 0 }, { "<<", 2, opid2('<','<'), ASSOC_LEFT, 11, 0 }, @@ -190,6 +193,7 @@ static const oper_info c_operators[] = { { "<", 2, opid1('<'), ASSOC_LEFT, 10, 0 }, { ">", 2, opid1('>'), ASSOC_LEFT, 10, 0 }, + { "<=>", 2, opid3('<','=','>'), ASSOC_LEFT, 10, 0 }, { "<=", 2, opid2('<','='), ASSOC_LEFT, 10, 0 }, { ">=", 2, opid2('>','='), ASSOC_LEFT, 10, 0 }, @@ -219,6 +223,7 @@ static const oper_info c_operators[] = { { "&=", 2, opid2('&','='), ASSOC_RIGHT, 2, 0 }, { "^=", 2, opid2('^','='), ASSOC_RIGHT, 2, 0 }, { "|=", 2, opid2('|','='), ASSOC_RIGHT, 2, 0 }, + { "&~=", 2, opid3('&','~','='), ASSOC_RIGHT, 2, 0 }, { ":", 0, opid2(':','?'), ASSOC_RIGHT, 1, 0 }, @@ -249,6 +254,9 @@ static const oper_info fte_operators[] = { { "+", 2, opid1('+'), ASSOC_LEFT, 12, 0 }, { "-", 2, opid1('-'), ASSOC_LEFT, 12, 0 }, + { "<<", 2, opid2('<','<'), ASSOC_LEFT, 11, 0 }, + { ">>", 2, opid2('>','>'), ASSOC_LEFT, 11, 0 }, + { "<", 2, opid1('<'), ASSOC_LEFT, 10, 0 }, { ">", 2, opid1('>'), ASSOC_LEFT, 10, 0 }, { "<=", 2, opid2('<','='), ASSOC_LEFT, 10, 0 },