X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ftepp.c;h=7b24c647eebaf940ac017bddc1ef2ced095c1ebf;hp=c574f03bb99d518191a243a8155e60f41a9e7c76;hb=2208136403121ecd81704b026daa371823bb61bb;hpb=f1650c42d950400b41be53af2da1ad9867642df4 diff --git a/ftepp.c b/ftepp.c index c574f03..7b24c64 100644 --- a/ftepp.c +++ b/ftepp.c @@ -734,6 +734,7 @@ static void ftepp_recursion_footer(ftepp_t *ftepp) ftepp_out(ftepp, "\n#pragma pop(line)\n", false); } +static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *params, bool resetline); static void ftepp_param_out(ftepp_t *ftepp, macroparam *param) { size_t i; @@ -742,8 +743,13 @@ static void ftepp_param_out(ftepp_t *ftepp, macroparam *param) out = param->tokens[i]; if (out->token == TOKEN_EOL) ftepp_out(ftepp, "\n", false); - else - ftepp_out(ftepp, out->value, false); + else { + ppmacro *find = ftepp_macro_find(ftepp, out->value); + if (OPTS_FLAG(FTEPP_INDIRECT_EXPANSION) && find && !find->has_params) + ftepp_macro_expand(ftepp, find, NULL, false); + else + ftepp_out(ftepp, out->value, false); + } } } @@ -837,7 +843,7 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param macro_params_find(macro, macro->output[o+1]->value, &pi)) { ++o; - + ftepp_stringify(ftepp, ¶ms[pi]); break; } @@ -849,10 +855,11 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param break; default: buffer = out->value; - if (vec_size(macro->output) > o + 1 && macro->output[o+1]->token == '#') + #define buffer_stripable(X) ((X) == ' ' || (X) == '\t') + if (vec_size(macro->output) > o + 1 && macro->output[o+1]->token == '#' && buffer_stripable(*buffer)) buffer++; if (strip) { - while (util_isspace(*buffer)) buffer++; + while (buffer_stripable(*buffer)) buffer++; strip = false; } ftepp_out(ftepp, buffer, false);