cond->line_number = get_line_number ();
vec_push (&vec_ifstack, cond);
- ret = !eval (start, pp);
- cond->need_else = !ret;
+ if ((ret = !eval (start, pp))) {
+ cond->need_else = 1;
+ }
} else {
iflevel++;
sname = xstrndup (caret, *pp - caret);
ret = (find_macro (sname) == NULL);
+ if ((ret = (find_macro (sname) == NULL))) {
+ cond->need_else = 1;
+ }
+
free (sname);
}
if (!is_end_of_line[(int) **pp]) {
report_line_at (get_filename (), get_line_number (), REPORT_WARNING, start, *pp, "extra tokens at end of #ifdef directive");
}
-
- cond->need_else = !ret;
} else {
iflevel++;
}
sname = xstrndup (caret, *pp - caret);
- ret = !(find_macro (sname) == NULL);
+
+ if ((ret = !(find_macro (sname) == NULL))) {
+ cond->need_else = 1;
+ }
free (sname);
if (!is_end_of_line[(int) **pp]) {
report_line_at (get_filename (), get_line_number (), REPORT_WARNING, start, *pp, "extra tokens at end of #ifndef directive");
}
-
- cond->need_else = !ret;
} else {
iflevel++;
struct cond *cond;
int ret = 1;
- if (!ignore_line) {
+ if (!iflevel) {
if (vec_ifstack.length == 0) {
}
- if (ignore_line) {
- ret = !eval (start, pp);
+ if (!cond->need_else) {
+ return ret;
}
- cond->need_else = !ret || !ignore_line;
+ if (!(ret = !eval (start, pp))) {
+ cond->need_else = 0;
+ }
}
struct cond *cond;
int ret = 1;
- if (!ignore_line) {
+ if (!iflevel) {
if (vec_ifstack.length == 0) {
report_line_at (get_filename (), get_line_number (), REPORT_WARNING, start, *pp, "extra tokens at end of #else directive");
}
- ret = cond->need_else;
+ ret = !cond->need_else;
}