X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=lexer.c;h=db0a8f4d9bf541bdd25597c5047e040d7dc36fc5;hp=bb601215fb11b2e97ae7a07a9e4355eec2e9ab31;hb=160e7cf7eebd7fa173fb739aca00143097a3518b;hpb=8d59d7029d02fef54d905f2de9babcb571f7ead2 diff --git a/lexer.c b/lexer.c index bb60121..db0a8f4 100644 --- a/lexer.c +++ b/lexer.c @@ -272,7 +272,7 @@ void lex_close(lex_file *lex) static int lex_fgetc(lex_file *lex) { if (lex->file) - return fgetc(lex->file); + return fs_file_getc(lex->file); if (lex->open_string) { if (lex->open_string_pos >= lex->open_string_length) return EOF; @@ -483,6 +483,9 @@ static bool lex_try_pragma(lex_file *lex) lex->line = line; while (ch != '\n' && ch != EOF) ch = lex_getch(lex); + vec_free(command); + vec_free(param); + vec_free(pragma); return true; unroll: @@ -495,13 +498,13 @@ unroll: vec_free(command); lex_ungetch(lex, ' '); } - if (command) { - vec_pop(command); - while (vec_size(command)) { - lex_ungetch(lex, (unsigned char)vec_last(command)); - vec_pop(command); + if (param) { + vec_pop(param); + while (vec_size(param)) { + lex_ungetch(lex, (unsigned char)vec_last(param)); + vec_pop(param); } - vec_free(command); + vec_free(param); lex_ungetch(lex, ' '); } if (pragma) { @@ -992,6 +995,8 @@ int lex_do(lex_file *lex) if (!lex->flags.mergelines || ch != '\\') break; ch = lex_getch(lex); + if (ch == '\r') + ch = lex_getch(lex); if (ch != '\n') { lex_ungetch(lex, ch); ch = '\\'; @@ -1350,7 +1355,7 @@ int lex_do(lex_file *lex) lex_tokench(lex, ch); nextch = lex_getch(lex); - if (nextch == '=') { + if (nextch == '=' || nextch == '*') { lex_tokench(lex, nextch); } else lex_ungetch(lex, nextch); @@ -1359,6 +1364,12 @@ int lex_do(lex_file *lex) return (lex->tok.ttype = TOKEN_OPERATOR); } + if (ch == '%') { + lex_tokench(lex, ch); + lex_endtoken(lex); + return (lex->tok.ttype = TOKEN_OPERATOR); + } + if (isident_start(ch)) { const char *v;