mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-03-21 10:21:03 +00:00
Implemented __VA_COUNT__
This commit is contained in:
parent
945aba6e10
commit
a568d43487
2 changed files with 14 additions and 2 deletions
15
ftepp.c
15
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:
|
||||
|
|
1
lexer.h
1
lexer.h
|
@ -76,6 +76,7 @@ enum {
|
|||
|
||||
TOKEN_VA_ARGS, /* for the ftepp only */
|
||||
TOKEN_VA_ARGS_ARRAY, /* for the ftepp only */
|
||||
TOKEN_VA_COUNT, /* to get the count of vaargs */
|
||||
|
||||
TOKEN_STRINGCONST, /* not the typename but an actual "string" */
|
||||
TOKEN_CHARCONST,
|
||||
|
|
Loading…
Reference in a new issue