From: Wolfgang (Blub) Bumiller Date: Sun, 18 Nov 2012 13:39:24 +0000 (+0100) Subject: update old_string after a recursive preprocess call so we don't reset to a free'd... X-Git-Tag: 0.1.9~404^2~19 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=4c2e5d7ebf200b32711b6b6a1d4fd94287fc2394;p=xonotic%2Fgmqcc.git update old_string after a recursive preprocess call so we don't reset to a free'd vector; add recursion header/footer pragmas --- diff --git a/ftepp.c b/ftepp.c index ad5e7c7..f0c34e4 100644 --- a/ftepp.c +++ b/ftepp.c @@ -483,6 +483,16 @@ static void ftepp_stringify(ftepp_t *ftepp, macroparam *param) ftepp_out(ftepp, "\"", false); } +static void ftepp_recursion_header(ftepp_t *ftepp) +{ + ftepp_out(ftepp, "\n#pragma push(line)\n", false); +} + +static void ftepp_recursion_footer(ftepp_t *ftepp) +{ + ftepp_out(ftepp, "\n#pragma pop(line)\n", false); +} + static bool ftepp_preprocess(ftepp_t *ftepp); static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *params) { @@ -560,11 +570,14 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param } ftepp->output_string = old_string; ftepp->lex = inlex; + ftepp_recursion_header(ftepp); if (!ftepp_preprocess(ftepp)) { lex_close(ftepp->lex); retval = false; goto cleanup; } + ftepp_recursion_footer(ftepp); + old_string = ftepp->output_string; cleanup: ftepp->lex = old_lexer;