X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=lexer.h;h=561148ca0a18db5a590b6aefcc9297194dba0bd6;hb=3391874ebf2c34bba33df1d8ac18eb5a78ef2a21;hp=445b16cbbd25728f640ccd87361d9b950291d6c1;hpb=4977f605d46db2a81da680011b2f6014b398ee91;p=xonotic%2Fgmqcc.git diff --git a/lexer.h b/lexer.h index 445b16c..561148c 100644 --- a/lexer.h +++ b/lexer.h @@ -8,7 +8,7 @@ typedef struct token_s token; struct token_s { int ttype; - MEM_VECTOR_MAKE(char, value); + char *value; union { vector v; @@ -100,6 +100,10 @@ typedef struct { typedef struct { FILE *file; + const char *open_string; + size_t open_string_length; + size_t open_string_pos; + char *name; size_t line; size_t sline; /* line at the start of a token */ @@ -115,16 +119,18 @@ typedef struct { bool noops; bool nodigraphs; /* used when lexing string constants */ bool preprocessing; /* whitespace and EOLs become actual tokens */ + bool mergelines; /* backslash at the end of a line escapes the newline */ } flags; int framevalue; - MEM_VECTOR_MAKE(frame_macro, frames); + frame_macro *frames; char *modelname; -} lex_file; -MEM_VECTOR_PROTO(lex_file, char, token); + size_t push_line; +} lex_file; lex_file* lex_open (const char *file); +lex_file* lex_open_string(const char *str, size_t len, const char *name); void lex_close(lex_file *lex); int lex_do (lex_file *lex); void lex_cleanup(void); @@ -162,7 +168,7 @@ static const oper_info c_operators[] = { { ".", 2, opid1('.'), ASSOC_LEFT, 15, 0 }, { "(", 0, opid1('('), ASSOC_LEFT, 15, 0 }, /* function call */ - { "[", 0, opid1('['), ASSOC_LEFT, 15, 0 }, /* array subscript */ + { "[", 2, opid1('['), ASSOC_LEFT, 15, 0 }, /* array subscript */ { "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, { "~", 1, opid2('~', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, @@ -223,7 +229,7 @@ static const oper_info qcc_operators[] = { { ".", 2, opid1('.'), ASSOC_LEFT, 15, 0 }, { "(", 0, opid1('('), ASSOC_LEFT, 15, 0 }, /* function call */ - { "[", 0, opid1('['), ASSOC_LEFT, 15, 0 }, /* array subscript */ + { "[", 2, opid1('['), ASSOC_LEFT, 15, 0 }, /* array subscript */ { "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, { "+", 1, opid2('+','P'), ASSOC_RIGHT, 14, OP_PREFIX },