From de87f81d41ef95772db9e0616e6ae31f5894eda7 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sun, 28 Dec 2008 12:06:04 +0000 Subject: fix another corner case in unifdef --- extra/scripts/unifdef.c | 4 ++-- extra/scripts/unifdef.test | 6 ++++++ 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 -- cgit v1.2.3