ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/calexpr.c
(Generate patch)

Comparing ray/src/common/calexpr.c (file contents):
Revision 2.37 by greg, Mon Mar 4 18:16:18 2019 UTC vs.
Revision 2.41 by greg, Sat Jan 15 02:00:21 2022 UTC

# Line 19 | Line 19 | static const char      RCSid[] = "$Id$";
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>
# Line 105 | Line 103 | eval(                  /* evaluate an expression string */
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);
# Line 197 | Line 198 | epfree(                        /* free a parse tree */
198  
199      }
200  
201 <    efree((char *)epar);
201 >    efree(epar);
202   }
203  
204                                  /* the following used to be a switch */
# Line 634 | Line 635 | getE2(void)                    /* E2 -> E2 MULOP E3 */
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          }
# Line 665 | Line 666 | getE3(void)                    /* E3 -> E4 ^ E3 */
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)) {
# Line 673 | Line 674 | getE3(void)                    /* E3 -> E4 ^ E3 */
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);
# Line 694 | Line 700 | getE4(void)                    /* E4 -> ADDOP E5 */
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();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines