Mercurial > ~dholland > hg > tradcpp > index.cgi
diff directive.c @ 16:9dda765ee85c
expression evaluator
author | David A. Holland |
---|---|
date | Mon, 20 Dec 2010 00:32:20 -0500 |
parents | f6177d3ed5c2 |
children | c08a947d8f30 |
line wrap: on
line diff
--- a/directive.c Sun Dec 19 21:42:01 2010 -0500 +++ b/directive.c Mon Dec 20 00:32:20 2010 -0500 @@ -11,8 +11,6 @@ #include "macro.h" #include "eval.h" -static const char ws[] = " \t\f\v"; - struct ifstate { struct ifstate *prev; struct place startplace; @@ -94,9 +92,10 @@ { char *expr; bool val; + struct place p3 = *p2; expr = macroexpand(p2, line, len, true); - val = eval(expr); + val = eval(&p3, expr); ifstate_push(p, val); free(expr); } @@ -122,6 +121,7 @@ d_elif(struct place *p, struct place *p2, char *line, size_t len) { char *expr; + struct place p3 = *p2; if (ifstate->seenelse) { complain(p, "#elif after #else"); @@ -132,7 +132,7 @@ ifstate->curtrue = false; } else { expr = macroexpand(p2, line, len, true); - ifstate->curtrue = eval(expr); + ifstate->curtrue = eval(&p3, expr); ifstate->evertrue = ifstate->curtrue; free(expr); }