X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=lexer.h;h=b3114ec8b0969dd6407d471ff1348a5a88b5c145;hb=fe3b1b2e8d5e8672e6a15ccb476a1fecc6f30ff7;hp=ae8812b261c5be6e68252a78704e2e32438b59c7;hpb=6759c3633b0d2d18f776d5798af889566d86f00e;p=xonotic%2Fgmqcc.git diff --git a/lexer.h b/lexer.h index ae8812b..b3114ec 100644 --- a/lexer.h +++ b/lexer.h @@ -81,6 +81,11 @@ _all_tokennames_added_[ (sizeof(_tokennames)/sizeof(_tokennames[0]))) ? 1 : -1]; +typedef struct { + char *name; + int value; +} frame_macro; + typedef struct { FILE *file; char *name; @@ -95,6 +100,10 @@ typedef struct { struct { bool noops; } flags; + + int framevalue; + MEM_VECTOR_MAKE(frame_macro, frames); + char *modelname; } lex_file; MEM_VECTOR_PROTO(lex_file, char, token); @@ -102,6 +111,7 @@ MEM_VECTOR_PROTO(lex_file, char, token); lex_file* lex_open (const char *file); void lex_close(lex_file *lex); int lex_do (lex_file *lex); +void lex_cleanup(void); /* Parser * @@ -129,13 +139,16 @@ typedef struct { #define opid3(a,b,c) ((a<<16)|(b<<8)|c) static const oper_info operators[] = { + { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */ + { "++", 1, opid3('S','+','+'), ASSOC_LEFT, 16, OP_SUFFIX}, { "--", 1, opid3('S','-','-'), ASSOC_LEFT, 16, OP_SUFFIX}, { ".", 2, opid1('.'), ASSOC_LEFT, 15, 0 }, + { "(", 0, opid1('('), ASSOC_LEFT, 15, 0 }, /* function call */ - { "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, 0 }, - { "~", 1, opid2('~', 'P'), ASSOC_RIGHT, 14, 0 }, + { "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, + { "~", 1, opid2('~', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, { "+", 1, opid2('+','P'), ASSOC_RIGHT, 14, OP_PREFIX }, { "-", 1, opid2('-','P'), ASSOC_RIGHT, 14, OP_PREFIX }, { "++", 1, opid3('+','+','P'), ASSOC_RIGHT, 14, OP_PREFIX },