static ppmacro *ppmacro_new(lex_ctx ctx, const char *name)
{
ppmacro *macro = (ppmacro*)mem_a(sizeof(ppmacro));
-
+
(void)ctx;
memset(macro, 0, sizeof(*macro));
macro->name = util_strdup(name);
static bool ftepp_define(ftepp_t *ftepp)
{
ppmacro *macro;
+ size_t l = ftepp_ctx(ftepp).line;
+
(void)ftepp_next(ftepp);
if (!ftepp_skipspace(ftepp))
return false;
else {
ppmacro_delete(macro);
}
+
+ for (; l < ftepp_ctx(ftepp).line; ++l)
+ ftepp_out(ftepp, "\n", true);
return true;
}
memcpy(vec_add(filename, len), pathfile, len);
vec_push(filename, '/');
}
- else {
- len = strlen(pathfile);
- memcpy(vec_add(filename, len), pathfile, len);
- if (vec_last(filename) != '/')
- vec_push(filename, '/');
- }
len = strlen(file);
memcpy(vec_add(filename, len+1), file, len);
}
inlex = lex_open(filename);
if (!inlex) {
- ftepp_error(ftepp, "failed to open include file `%s`", filename);
+ ftepp_error(ftepp, "open failed on include file `%s`", filename);
vec_free(filename);
return false;
}
case TOKEN_KEYWORD:
case TOKEN_IDENT:
case TOKEN_TYPENAME:
- macro = ftepp_macro_find(ftepp, ftepp_tokval(ftepp));
+ if (ftepp->output_on)
+ macro = ftepp_macro_find(ftepp, ftepp_tokval(ftepp));
+ else
+ macro = NULL;
if (!macro) {
ftepp_out(ftepp, ftepp_tokval(ftepp), false);
ftepp_next(ftepp);
ftepp = ftepp_new();
if (!ftepp)
return false;
+
+ /* set the right macro based on the selected standard */
ftepp_add_define(NULL, "GMQCC");
+ if (opts_standard == COMPILER_FTEQCC)
+ ftepp_add_define(NULL, "__STD_FTEQCC__");
+ else if (opts_standard == COMPILER_GMQCC)
+ ftepp_add_define(NULL, "__STD_GMQCC__");
+ else if (opts_standard == COMPILER_QCC)
+ ftepp_add_define(NULL, "__STD_QCC__");
+
return true;
}