Browse Source

fix another corner case in unifdef

Denis Vlasenko 15 years ago
parent
commit
de87f81d41
2 changed files with 8 additions and 2 deletions
  1. 2 2
      extra/scripts/unifdef.c
  2. 6 0
      extra/scripts/unifdef.test

+ 2 - 2
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);

+ 6 - 0
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