char *includename;
} ftepp_t;
-typedef struct {
- const char *name;
- char *(*func)(lex_file *);
-} predef_t;
-
/*
* Implement the predef subsystem now. We can do this safely with the
* help of lexer contexts.
return value;
}
-static const predef_t ftepp_predefs[] = {
+const ftepp_predef_t ftepp_predefs[FTEPP_PREDEF_COUNT] = {
{ "__LINE__", &ftepp_predef_line },
{ "__FILE__", &ftepp_predef_file },
{ "__COUNTER__", &ftepp_predef_counter },
{
ppmacro *macro;
bool wasnot = false;
+ bool wasneg = false;
if (!ftepp_skipspace(ftepp))
return false;
return false;
}
+ if (ftepp->token == TOKEN_OPERATOR && !strcmp(ftepp_tokval(ftepp), "-"))
+ {
+ wasneg = true;
+ ftepp_next(ftepp);
+ if (!ftepp_skipspace(ftepp))
+ return false;
+ }
+
switch (ftepp->token) {
case TOKEN_IDENT:
case TOKEN_TYPENAME:
}
break;
case TOKEN_STRINGCONST:
+ *value_out = 0;
*out = false;
break;
case TOKEN_INTCONST:
default:
ftepp_error(ftepp, "junk in #if: `%s` ...", ftepp_tokval(ftepp));
+ if (opts.debug)
+ ftepp_error(ftepp, "internal: token %i\n", ftepp->token);
return false;
}
+ if (wasneg)
+ *value_out = -*value_out;
if (wasnot) {
*out = !*out;
*value_out = (*out ? 1 : 0);