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.50 by greg, Tue Feb 27 01:24:10 2024 UTC vs.
Revision 2.51 by greg, Mon Sep 16 17:31:14 2024 UTC

# Line 92 | Line 92 | eparse(                        /* parse an expression string */
92      EPNODE  *ep;
93  
94      initstr(expr, NULL, 0);
95 <    curfunc = NULL;
95 >    ecurfunc = NULL;
96      ep = getE1();
97      if (nextc != EOF)
98 <        syntax("unexpected character");
98 >        esyntax("unexpected character");
99      return(ep);
100   }
101  
# Line 423 | Line 423 | initfile(              /* prepare input file */
423      lineno = ln;
424      linepos = 0;
425      inpbuf[0] = '\0';
426 <    scan();
426 >    escan();
427   }
428  
429  
# Line 439 | Line 439 | initstr(               /* prepare input string */
439      lineno = ln;
440      linbuf = s;
441      linepos = 0;
442 <    scan();
442 >    escan();
443   }
444  
445  
# Line 459 | Line 459 | getscanpos(    /* return current scan position */
459  
460  
461   int
462 < scan(void)              /* scan next character, return literal next */
462 > escan(void)             /* scan next character, return literal next */
463   {
464      int  lnext = 0;
465  
# Line 481 | Line 481 | scan(void)             /* scan next character, return literal nex
481                  break;
482          }
483          if (nextc == '{') {
484 <            scan();
484 >            escan();
485              while (nextc != '}')
486                  if (nextc == EOF)
487 <                    syntax("'}' expected");
487 >                    esyntax("'}' expected");
488                  else
489 <                    scan();
490 <            scan();
489 >                    escan();
490 >            escan();
491          }
492      } while (isspace(nextc));
493      return(lnext);
# Line 522 | Line 522 | long2ascii(                          /* convert long to ascii */
522  
523  
524   void
525 < syntax(                 /* report syntax error and quit */
525 > esyntax(                        /* report syntax error and quit */
526      char  *err
527   )
528   {
# Line 577 | Line 577 | getname(void)                  /* scan an identifier */
577      int  i, lnext;
578  
579      lnext = nextc;
580 <    for (i = 0; i < RMAXWORD && isid(lnext); i++, lnext = scan())
580 >    for (i = 0; i < RMAXWORD && isid(lnext); i++, lnext = escan())
581          str[i] = lnext;
582      str[i] = '\0';
583      while (isid(lnext))         /* skip rest of name */
584 <        lnext = scan();
584 >        lnext = escan();
585  
586      return(str);
587   }
# Line 596 | Line 596 | getinum(void)                  /* scan a positive integer */
596      lnext = nextc;
597      while (isdigit(lnext)) {
598          n = n * 10 + lnext - '0';
599 <        lnext = scan();
599 >        lnext = escan();
600      }
601      return(n);
602   }
# Line 612 | Line 612 | getnum(void)                   /* scan a positive float */
612      lnext = nextc;
613      while (isdigit(lnext) && i < RMAXWORD) {
614          str[i++] = lnext;
615 <        lnext = scan();
615 >        lnext = escan();
616      }
617      if ((lnext == '.') & (i < RMAXWORD)) {
618          str[i++] = lnext;
619 <        lnext = scan();
619 >        lnext = escan();
620          if (i == 1 && !isdigit(lnext))
621 <            syntax("badly formed number");
621 >            esyntax("badly formed number");
622          while (isdigit(lnext) && i < RMAXWORD) {
623              str[i++] = lnext;
624 <            lnext = scan();
624 >            lnext = escan();
625          }
626      }
627      if ((lnext == 'e') | (lnext == 'E') && i < RMAXWORD) {
628          str[i++] = lnext;
629 <        lnext = scan();
629 >        lnext = escan();
630          if ((lnext == '-') | (lnext == '+') && i < RMAXWORD) {
631              str[i++] = lnext;
632 <            lnext = scan();
632 >            lnext = escan();
633          }
634          if (!isdigit(lnext))
635 <            syntax("missing exponent");
635 >            esyntax("missing exponent");
636          while (isdigit(lnext) && i < RMAXWORD) {
637              str[i++] = lnext;
638 <            lnext = scan();
638 >            lnext = escan();
639          }
640      }
641      str[i] = '\0';
# Line 654 | Line 654 | getE1(void)                    /* E1 -> E1 ADDOP E2 */
654      while ((nextc == '+') | (nextc == '-')) {
655          ep2 = newnode();
656          ep2->type = nextc;
657 <        scan();
657 >        escan();
658          addekid(ep2, ep1);
659          addekid(ep2, getE2());
660          if (esupport&E_RCONST &&
# Line 676 | Line 676 | getE2(void)                    /* E2 -> E2 MULOP E3 */
676      while ((nextc == '*') | (nextc == '/')) {
677          ep2 = newnode();
678          ep2->type = nextc;
679 <        scan();
679 >        escan();
680          addekid(ep2, ep1);
681          addekid(ep2, getE3());
682          if (esupport&E_RCONST) {
# Line 686 | Line 686 | getE2(void)                    /* E2 -> E2 MULOP E3 */
686                  } else if (ep3->type == NUM) {
687                          if (ep2->type == '/') {
688                                  if (ep3->v.num == 0)
689 <                                        syntax("divide by zero constant");
689 >                                        esyntax("divide by zero constant");
690                                  ep2->type = '*';        /* for speed */
691                                  ep3->v.num = 1./ep3->v.num;
692                          } else if (ep3->v.num == 0) {
# Line 718 | Line 718 | getE3(void)                    /* E3 -> E4 ^ E3 */
718                  return(ep1);
719          ep2 = newnode();
720          ep2->type = nextc;
721 <        scan();
721 >        escan();
722          addekid(ep2, ep1);
723          addekid(ep2, getE3());
724          if (esupport&E_RCONST) {
# Line 753 | Line 753 | getE4(void)                    /* E4 -> ADDOP E5 */
753      EPNODE  *ep1, *ep2;
754  
755      if (nextc == '-') {
756 <        scan();
756 >        escan();
757          ep2 = getE5();
758          if (ep2->type == NUM) {
759                  ep2->v.num = -ep2->v.num;
# Line 770 | Line 770 | getE4(void)                    /* E4 -> ADDOP E5 */
770          return(ep1);
771      }
772      if (nextc == '+')
773 <        scan();
773 >        escan();
774      return(getE5());
775   }
776  
# Line 788 | Line 788 | getE5(void)                    /* E5 -> (E1) */
788          EPNODE  *ep1, *ep2;
789  
790          if (nextc == '(') {
791 <                scan();
791 >                escan();
792                  ep1 = getE1();
793                  if (nextc != ')')
794 <                        syntax("')' expected");
795 <                scan();
794 >                        esyntax("')' expected");
795 >                escan();
796                  return(ep1);
797          }
798          if (esupport&E_INCHAN && nextc == '$') {
799 <                scan();
799 >                escan();
800                  ep1 = newnode();
801                  ep1->type = CHAN;
802                  ep1->v.chan = getinum();
# Line 807 | Line 807 | getE5(void)                    /* E5 -> (E1) */
807                  nam = getname();
808                  ep1 = NULL;
809                  if ((esupport&(E_VARIABLE|E_FUNCTION)) == (E_VARIABLE|E_FUNCTION)
810 <                                && curfunc != NULL)
811 <                        for (i = 1, ep2 = curfunc->v.kid->sibling;
810 >                                && ecurfunc != NULL)
811 >                        for (i = 1, ep2 = ecurfunc->v.kid->sibling;
812                                          ep2 != NULL; i++, ep2 = ep2->sibling)
813                                  if (!strcmp(ep2->v.name, nam)) {
814                                          ep1 = newnode();
# Line 827 | Line 827 | getE5(void)                    /* E5 -> (E1) */
827                          addekid(ep2, ep1);
828                          ep1 = ep2;
829                          do {
830 <                                scan();
830 >                                escan();
831                                  addekid(ep1, getE1());
832                          } while (nextc == ',');
833                          if (nextc != ')')
834 <                                syntax("')' expected");
835 <                        scan();
834 >                                esyntax("')' expected");
835 >                        escan();
836                  } else if (!(esupport&E_VARIABLE))
837 <                        syntax("'(' expected");
837 >                        esyntax("'(' expected");
838                  if (esupport&E_RCONST && isconstvar(ep1))
839                          ep1 = rconst(ep1);
840                  return(ep1);
# Line 845 | Line 845 | getE5(void)                    /* E5 -> (E1) */
845                  ep1->v.num = getnum();
846                  return(ep1);
847          }
848 <        syntax("unexpected character");
848 >        esyntax("unexpected character");
849          return NULL; /* pro forma return */
850   }
851  
# Line 862 | Line 862 | rconst(                        /* reduce a constant expression */
862      errno = 0;
863      ep->v.num = evalue(epar);
864      if ((errno == EDOM) | (errno == ERANGE))
865 <        syntax("bad constant expression");
865 >        esyntax("bad constant expression");
866      epfree(epar,1);
867  
868      return(ep);
# Line 901 | Line 901 | isconstfun(                    /* is ep linked to a constant function?
901   )
902   {
903      EPNODE  *dp;
904 <    LIBR  *lp;
904 >    ELIBR  *lp;
905  
906      if (ep->type != VAR)
907          return(0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines