summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-28 12:06:04 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-28 12:06:04 +0000
commitde87f81d41ef95772db9e0616e6ae31f5894eda7 (patch)
treeb119961373a3f7d2b14bba5305bbbc204c14fc14
parent08479acdf9aa708ee5edcca77cdb9cf0cdaaa866 (diff)
fix another corner case in unifdef
-rw-r--r--extra/scripts/unifdef.c4
-rw-r--r--extra/scripts/unifdef.test6
2 files changed, 8 insertions, 2 deletions
diff --git a/extra/scripts/unifdef.c b/extra/scripts/unifdef.c
index 87402c0ce..0eb0d0900 100644
--- a/extra/scripts/unifdef.c
+++ b/extra/scripts/unifdef.c
@@ -601,7 +601,7 @@ getline(void)
linestate = LS_DIRTY;
}
/* skipcomment should have changed the state */
-// Hmm, happens sometimes on valid files
+// Hmm hppens sometimes on valid files
// if (linestate == LS_HASH) {
// debug("bug at line %d", __LINE__);
// abort(); /* bug */
@@ -795,6 +795,7 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
cp += strlen(op->str);
debug("eval%d '%s'", ops - eval_ops, op->str);
right_side = ops->inner(ops+1, &val, &cp);
+ *cpp = cp;
/* If short_circuit_val is 0 or 1, we can ignore
* right side if left size is known, and its value
@@ -820,7 +821,6 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
left_side = right_side;
}
- *cpp = cp;
debug("eval%d = %d LT_IF:%d", ops - eval_ops, *valp, (left_side == LT_IF));
if (left_side == LT_IF)
return (LT_IF);
diff --git a/extra/scripts/unifdef.test b/extra/scripts/unifdef.test
index 7cd4f148e..5ba4e48df 100644
--- a/extra/scripts/unifdef.test
+++ b/extra/scripts/unifdef.test
@@ -24,6 +24,12 @@ hello world
#if (1 > 0) && defined A
hello world
#endif
+#if defined A && (defined FOO || defined BAR)
+hello world
+#endif
+#if (defined FOO || defined BAR) && defined A
+hello world
+#endif
*** Everything should be visible here, but #if/#endif removed:
#if defined B || !defined A