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

Comparing ray/src/common/caldefn.c (file contents):
Revision 2.35 by greg, Tue Sep 26 00:14:02 2023 UTC vs.
Revision 2.37 by greg, Sun Oct 1 18:02:23 2023 UTC

# Line 59 | Line 59 | static EPNODE  *ochpos;                        /* ...dnext */
59   static EPNODE  *outchan;
60  
61   EPNODE  *curfunc = NULL;
62 #define  dname(ep)      ((ep)->v.kid->type == SYM ? \
63                        (ep)->v.kid->v.name : \
64                        (ep)->v.kid->v.kid->v.name)
62  
63  
64   void
# Line 178 | Line 175 | dclear(                        /* delete variable definitions of name */
175          char  *name
176   )
177   {
178 <    EPNODE  *ep;
178 >    VARDEF  *vp;
179 >    EPNODE  *dp;
180  
181 <    while ((ep = dpop(name)) != NULL) {
182 <        if (ep->type == ':') {
183 <            dpush(name, ep);            /* don't clear constants */
184 <            return;
185 <        }
188 <        epfree(ep);
181 >    while ((vp = varlookup(name)) != NULL &&
182 >                (dp = vp->def) != NULL && dp->type == '=') {
183 >        vp->def = dp->sibling;
184 >        epfree(dp);
185 >        varfree(vp);
186      }
187   }
188  
# Line 295 | Line 292 | qualname(              /* get qualified name */
292      static char  nambuf[RMAXWORD+1];
293      char  *cp = nambuf, *cpp;
294                                  /* check for explicit local */
295 <    if (*nam == CNTXMARK)
295 >    if (*nam == CNTXMARK) {
296          if (lvl > 0)            /* only action is to refuse search */
297              return(NULL);
298 <        else
299 <            nam++;
303 <    else if (nam == nambuf)     /* check for repeat call */
298 >        nam++;
299 >    } else if (nam == nambuf)   /* check for repeat call */
300          return(lvl > 0 ? NULL : nam);
301                                  /* copy name to static buffer */
302      while (*nam) {
# Line 322 | Line 318 | qualname(              /* get qualified name */
318          while (*++cpp && *cpp != CNTXMARK)
319              ;
320      }
321 <    while (*cpp) {              /* copy context to static buffer */
321 >    while (*cpp) {              /* add remaining context to name */
322          if (cp >= nambuf+RMAXWORD)
323              goto toolong;
324          *cp++ = *cpp++;
# Line 594 | Line 590 | getstatement(void)                     /* get next statement */
590          addchan(ep);
591      } else {                            /* ordinary definition */
592          ep = getdefn();
593 <        qname = qualname(dname(ep), 0);
593 >        qname = qualname(dfn_name(ep), 0);
594          if (esupport&E_REDEFW && (vdef = varlookup(qname)) != NULL) {
595              if (vdef->def != NULL && epcmp(ep, vdef->def)) {
596                  wputs(qname);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines