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.29 by schorsch, Sun Mar 28 20:33:12 2004 UTC vs.
Revision 2.33 by greg, Sun Jun 14 18:21:58 2009 UTC

# Line 47 | Line 47 | static double  ebotch(EPNODE *);
47   unsigned int  esupport =                /* what to support */
48                  E_VARIABLE | E_FUNCTION ;
49  
50 + int  eofc = 0;                          /* optional end-of-file character */
51   int  nextc;                             /* lookahead character */
52  
53   double  (*eoper[])(EPNODE *) = {        /* expression operations */
# Line 144 | Line 145 | epcmp(                 /* compare two expressions for equivalence */
145          case ':':
146                  return(epcmp(ep1->v.kid->sibling, ep2->v.kid->sibling));
147  
148 <        case TICK:
148 >        case CLKT:
149          case SYM:                       /* should never get this one */
150                  return(0);
151  
# Line 184 | Line 185 | epfree(                        /* free a parse tree */
185          case NUM:
186          case CHAN:
187          case ARG:
188 <        case TICK:
188 >        case CLKT:
189              break;
190  
191          default:
# Line 293 | Line 294 | epow(
294      lasterrno = errno;
295      errno = 0;
296      d = pow(evalue(ep1), evalue(ep1->sibling));
297 < #ifdef  IEEE
298 <    if (!finite(d))
299 <        errno = EDOM;
297 > #ifdef  isnan
298 >    if (errno == 0)
299 >        if (isnan(d))
300 >            errno = EDOM;
301 >        else if (isinf(d))
302 >            errno = ERANGE;
303   #endif
304      if (errno == EDOM || errno == ERANGE) {
305          wputs("Illegal power\n");
# Line 413 | Line 417 | scan(void)             /* scan next character, return literal nex
417              nextc = linbuf[linepos++];
418          if (!lnext)
419                  lnext = nextc;
420 +        if (nextc == eofc) {
421 +                nextc = EOF;
422 +                break;
423 +        }
424          if (nextc == '{') {
425              scan();
426              while (nextc != '}')
# Line 652 | Line 660 | getE4(void)                            /* E4 -> ADDOP E5 */
660                  return(ep2);
661          }
662          if (ep2->type == UMINUS) {      /* don't generate -(-E5) */
663 +            ep1 = ep2->v.kid;
664              efree((char *)ep2);
665 <            return(ep2->v.kid);
665 >            return(ep1);
666          }
667          ep1 = newnode();
668          ep1->type = UMINUS;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines