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.9 by greg, Tue Apr 23 15:26:26 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 +    
689 + #ifdef  FUNCTION
690 +    if (ep->type == FUNC) {
691 +        if (ep->v.kid->type != VAR)
692 +            return(0);
693 +        ep1 = ep->v.kid->v.ln->def;
694 +        if (ep1 != NULL && ep1->type != ':')
695 +            return(0);
696 +        if ((ep1 == NULL || ep1->v.kid->type != FUNC)
697 +                && liblookup(ep->v.kid->v.ln->name) == NULL)
698 +            return(0);
699 +        for (ep1 = ep->v.kid->sibling; ep1 != NULL; ep1 = ep1->sibling)
700 +            if (ep1->type != NUM)
701 +                return(0);
702 +        return(1);
703 +    }
704 + #endif
705 +    if (ep->type != VAR)
706 +        return(0);
707 +    ep1 = ep->v.ln->def;
708 +    if (ep1 == NULL || ep1->type != ':')
709 +        return(0);
710 + #ifdef  FUNCTION
711 +    if (ep1->v.kid->type != SYM)
712 +        return(0);
713 + #endif
714 +    return(1);
715 + #else
716 +    return(ep->type == FUNC);
717 + #endif
718   }
719   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines