Allow unary minus in ftepp_if_value
authorWolfgang Bumiller <blub@speed.at>
Wed, 2 Jan 2013 16:23:49 +0000 (17:23 +0100)
committerWolfgang Bumiller <blub@speed.at>
Wed, 2 Jan 2013 16:26:35 +0000 (17:26 +0100)
ftepp.c

diff --git a/ftepp.c b/ftepp.c
index 426bfc147f84ca624b4f92bc91b71938826aeeaa..ecc36d8e1851f422aed1c31f0e2696ae71db548a 100644 (file)
--- a/ftepp.c
+++ b/ftepp.c
@@ -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);