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 1.8 by greg, Wed Apr 17 10:54:58 1991 UTC vs.
Revision 1.10 by greg, Tue Apr 23 15:44:41 1991 UTC

# Line 78 | Line 78 | double  (*eoper[])() = {               /* expression operations */
78          esubtr,
79          0,
80          edivi,
81 <        0,0,0,0,0,0,0,0,0,0,0,0,0,
81 >        0,0,0,0,0,0,0,0,0,0,
82          ebotch,
83 +        0,0,
84 +        ebotch,
85          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
86          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
87          epow,
# Line 641 | Line 643 | getE5()                                /* E5 -> (E1) */
643              syntax("'(' expected");
644   #endif
645   #endif
646 + #ifdef  RCONST
647 +        if (isconstvar(ep1))
648 +            ep1 = rconst(ep1);
649 + #endif
650          return(ep1);
651      }
652   #endif
# Line 671 | Line 677 | register EPNODE  *epar;
677      epfree(epar);
678  
679      return(ep);
680 + }
681 +
682 +
683 + isconstvar(ep)                  /* is ep linked to a constant? */
684 + register EPNODE  *ep;
685 + {
686 + #ifdef  VARIABLE
687 +    register EPNODE  *ep1;
688 + #ifdef  FUNCTION
689 +    LIBR  *lp;
690 +
691 +    if (ep->type == FUNC) {
692 +        if (ep->v.kid->type != VAR)
693 +            return(0);
694 +        ep1 = ep->v.kid->v.ln->def;
695 +        if (ep1 != NULL && ep1->type != ':')
696 +            return(0);
697 +        if ((ep1 == NULL || ep1->v.kid->type != FUNC)
698 +                && ((lp = liblookup(ep->v.kid->v.ln->name)) == NULL
699 +                        || lp->atyp != ':'))
700 +            return(0);
701 +        for (ep1 = ep->v.kid->sibling; ep1 != NULL; ep1 = ep1->sibling)
702 +            if (ep1->type != NUM)
703 +                return(0);
704 +        return(1);
705 +    }
706 + #endif
707 +    if (ep->type != VAR)
708 +        return(0);
709 +    ep1 = ep->v.ln->def;
710 +    if (ep1 == NULL || ep1->type != ':')
711 +        return(0);
712 + #ifdef  FUNCTION
713 +    if (ep1->v.kid->type != SYM)
714 +        return(0);
715 + #endif
716 +    return(1);
717 + #else
718 +    return(ep->type == FUNC);
719 + #endif
720   }
721   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines