X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ftepp.c;h=a0f110533077bcd4326f1b90a0f934008dfd4350;hp=4734639244ab1f426706dcb8dcc61b0b93ed81f5;hb=a568d434878e753126b357031d31899e4a583465;hpb=945aba6e10dfec4ec987e918dcab27ed4a84138f diff --git a/ftepp.c b/ftepp.c index 4734639..a0f1105 100644 --- a/ftepp.c +++ b/ftepp.c @@ -451,8 +451,12 @@ static bool ftepp_define_body(ftepp_t *ftepp, ppmacro *macro) ftepp->token = old; } } - else - { + else if (macro->variadic && !strcmp(ftepp_tokval(ftepp), "__VA_COUNT__")) { + ftepp->token = TOKEN_VA_COUNT; + ptok = pptoken_make(ftepp); + vec_push(macro->output, ptok); + ftepp_next(ftepp); + } else { ptok = pptoken_make(ftepp); vec_push(macro->output, ptok); ftepp_next(ftepp); @@ -681,6 +685,7 @@ static void ftepp_param_out(ftepp_t *ftepp, macroparam *param) static bool ftepp_preprocess(ftepp_t *ftepp); static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *params, bool resetline) { + char *buffer = NULL; char *old_string = ftepp->output_string; char *inner_string; lex_file *old_lexer = ftepp->lex; @@ -736,6 +741,12 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param ftepp_param_out(ftepp, ¶ms[out->constval.i + vararg_start]); break; + case TOKEN_VA_COUNT: + util_asprintf(&buffer, "%d", varargs); + ftepp_out(ftepp, buffer, false); + mem_d(buffer); + break; + case TOKEN_IDENT: case TOKEN_TYPENAME: case TOKEN_KEYWORD: