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);
 	}