Allow unary minus in ftepp_if_value

This commit is contained in:
Wolfgang Bumiller 2013-01-02 17:23:49 +01:00
parent 0d839bd138
commit 654eceb33b

14
ftepp.c
View file

@ -788,6 +788,7 @@ static bool ftepp_if_value(ftepp_t *ftepp, bool *out, double *value_out)
{
ppmacro *macro;
bool wasnot = false;
bool wasneg = false;
if (!ftepp_skipspace(ftepp))
return false;
@ -799,6 +800,14 @@ static bool ftepp_if_value(ftepp_t *ftepp, bool *out, double *value_out)
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:
@ -855,6 +864,7 @@ static bool ftepp_if_value(ftepp_t *ftepp, bool *out, double *value_out)
}
break;
case TOKEN_STRINGCONST:
*value_out = 0;
*out = false;
break;
case TOKEN_INTCONST:
@ -878,8 +888,12 @@ static bool ftepp_if_value(ftepp_t *ftepp, bool *out, double *value_out)
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);