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;
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);
+ }
}
}
macro_params_find(macro, macro->output[o+1]->value, &pi))
{
++o;
-
+
ftepp_stringify(ftepp, ¶ms[pi]);
break;
}
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 (*buffer == ' ' || *buffer == '\t') buffer++;
+ while (buffer_stripable(*buffer)) buffer++;
strip = false;
}
ftepp_out(ftepp, buffer, false);