X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=lexer.h;h=a2f06acf7cb189ebff47fcdbb10bea2698583d31;hp=261fdf9dca93fe8bd3128ab6a869864bd8971f72;hb=deb7ccb8302f4477cf085740b9dfc7e0d11da47f;hpb=e00c8da849f4804bca8e11a167ae3d2c58233693 diff --git a/lexer.h b/lexer.h index 261fdf9..a2f06ac 100644 --- a/lexer.h +++ b/lexer.h @@ -45,6 +45,8 @@ enum { TOKEN_KEYWORD, /* loop */ + TOKEN_DOTS, /* 3 dots, ... */ + TOKEN_STRINGCONST, /* not the typename but an actual "string" */ TOKEN_CHARCONST, TOKEN_VECTORCONST, @@ -66,6 +68,7 @@ static const char *_tokennames[] = { "TOKEN_TYPENAME", "TOKEN_OPERATOR", "TOKEN_KEYWORD", + "TOKEN_DOTS", "TOKEN_STRINGCONST", "TOKEN_CHARCONST", "TOKEN_VECTORCONST", @@ -95,6 +98,8 @@ typedef struct { char peek[256]; size_t peekpos; + bool eof; + token *tok; struct { @@ -103,6 +108,7 @@ typedef struct { int framevalue; MEM_VECTOR_MAKE(frame_macro, frames); + char *modelname; } lex_file; MEM_VECTOR_PROTO(lex_file, char, token); @@ -110,6 +116,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 * @@ -137,10 +144,13 @@ 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, OP_PREFIX }, { "~", 1, opid2('~', 'P'), ASSOC_RIGHT, 14, OP_PREFIX },