19 |
|
|
20 |
|
#include "copyright.h" |
21 |
|
|
22 |
– |
#include <stdio.h> |
23 |
– |
#include <string.h> |
22 |
|
#include <ctype.h> |
23 |
|
#include <errno.h> |
24 |
|
#include <math.h> |
103 |
|
char *expr |
104 |
|
) |
105 |
|
{ |
106 |
+ |
int prev_support = esupport; |
107 |
|
EPNODE *ep; |
108 |
|
double rval; |
109 |
|
|
110 |
+ |
esupport &= ~E_RCONST; /* don't bother reducing constant expr */ |
111 |
|
ep = eparse(expr); |
112 |
+ |
esupport = prev_support; /* as you were */ |
113 |
|
rval = evalue(ep); |
114 |
|
epfree(ep); |
115 |
|
return(rval); |
198 |
|
|
199 |
|
} |
200 |
|
|
201 |
< |
efree((char *)epar); |
201 |
> |
efree(epar); |
202 |
|
} |
203 |
|
|
204 |
|
/* the following used to be a switch */ |
635 |
|
} else if (ep1->type == NUM && ep1->v.num == 0) { |
636 |
|
epfree(ep3); /* (0 * E3) or (0 / E3) */ |
637 |
|
ep1->sibling = NULL; |
638 |
< |
efree((char *)ep2); |
638 |
> |
efree(ep2); |
639 |
|
ep2 = ep1; |
640 |
|
} |
641 |
|
} |
666 |
|
} else if (ep1->type == NUM && ep1->v.num == 0) { |
667 |
|
epfree(ep3); /* (0 ^ E3) */ |
668 |
|
ep1->sibling = NULL; |
669 |
< |
efree((char *)ep2); |
669 |
> |
efree(ep2); |
670 |
|
ep2 = ep1; |
671 |
|
} else if ((ep3->type == NUM && ep3->v.num == 0) || |
672 |
|
(ep1->type == NUM && ep1->v.num == 1)) { |
674 |
|
ep2 = newnode(); |
675 |
|
ep2->type = NUM; |
676 |
|
ep2->v.num = 1; |
677 |
+ |
} else if (ep3->type == NUM && ep3->v.num == 1) { |
678 |
+ |
efree(ep3); /* (E4 ^ 1) */ |
679 |
+ |
ep1->sibling = NULL; |
680 |
+ |
efree(ep2); |
681 |
+ |
ep2 = ep1; |
682 |
|
} |
683 |
|
} |
684 |
|
return(ep2); |
700 |
|
} |
701 |
|
if (ep2->type == UMINUS) { /* don't generate -(-E5) */ |
702 |
|
ep1 = ep2->v.kid; |
703 |
< |
efree((char *)ep2); |
703 |
> |
efree(ep2); |
704 |
|
return(ep1); |
705 |
|
} |
706 |
|
ep1 = newnode(); |