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 1.13 by greg, Thu Aug 8 11:22:06 1991 UTC vs.
Revision 1.16 by greg, Thu Aug 8 14:38:00 1991 UTC

# Line 219 | Line 219 | int  lvl;
219   {
220      static char  nambuf[MAXWORD];
221      register char  *cp = nambuf, *cpp = context;
222 +                                /* check for explicit global */
223 +    if (*nam == CNTXMARK)
224 +        return(lvl > 0 ? NULL : nam+1);
225                                  /* check for repeat call */
226      if (nam == nambuf)
227          return(lvl > 0 ? NULL : nambuf);
# Line 252 | Line 255 | int  lvl;
255      return(nambuf);             /* return qualified name */
256   toolong:
257      *cp = '\0';
258 <    wputs(nambuf);
259 <    wputs(": name too long\n");
260 <    return(NULL);
258 >    eputs(nambuf);
259 >    eputs(": name too long\n");
260 >    quit(1);
261   }
262  
263  
264 + incontext(qn)                   /* is qualified name in current context? */
265 + register char  *qn;
266 + {
267 +    while (*qn && *qn != CNTXMARK)      /* find context mark */
268 +        ;
269 +    return(!strcmp(qn, context));
270 + }
271 +
272 +
273   #ifdef  OUTCHAN
274   chanout(cs)                     /* set output channels */
275   int  (*cs)();
# Line 277 | Line 289 | int  lvl;
289      register int  i;
290      register VARDEF  *vp;
291      register EPNODE  *ep;
292 <
292 >                                /* if context is global, clear all */
293      for (i = 0; i < NHASH; i++)
294          for (vp = hashtbl[i]; vp != NULL; vp = vp->next)
295 <            if (lvl >= 2)
296 <                dremove(vp->name);
297 <            else
298 <                dclear(vp->name);
295 >            if (!context[0] || incontext(vp->name))
296 >                if (lvl >= 2)
297 >                    dremove(vp->name);
298 >                else
299 >                    dclear(vp->name);
300   #ifdef  OUTCHAN
301      if (lvl >= 1) {
302          for (ep = outchan; ep != NULL; ep = ep->sibling)
# Line 327 | Line 340 | varinsert(name)                        /* get a link to a variable */
340   char  *name;
341   {
342      register VARDEF  *vp;
343 +    LIBR  *libp;
344      int  hv;
345      
346      if ((vp = varlookup(name)) != NULL) {
347          vp->nlinks++;
348          return(vp);
349      }
350 <    name = qualname(name, 0);           /* use fully qualified name */
350 > #ifdef  FUNCTION
351 >    libp = liblookup(name);
352 > #else
353 >    libp = NULL;
354 > #endif
355 >    if (libp == NULL)                   /* if name not in library */
356 >        name = qualname(name, 0);       /* use fully qualified version */
357      hv = hash(name);
358      vp = (VARDEF *)emalloc(sizeof(VARDEF));
359      vp->name = savestr(name);
360      vp->nlinks = 1;
361      vp->def = NULL;
362 <    vp->lib = NULL;
362 >    vp->lib = libp;
363      vp->next = hashtbl[hv];
364      hashtbl[hv] = vp;
365      return(vp);
# Line 469 | Line 489 | getstatement()                 /* get next statement */
489   {
490      register EPNODE  *ep;
491      char  *qname;
492 <    EPNODE  *lastdef;
492 >    register VARDEF  *vdef;
493  
494      if (nextc == ';') {         /* empty statement */
495          scan();
# Line 485 | Line 505 | getstatement()                 /* get next statement */
505          ep = getdefn();
506          qname = qualname(dname(ep), 0);
507   #ifdef  REDEFW
508 <        if ((lastdef = dlookup(qname)) != NULL) {
509 <            wputs(qname);
510 <            if (lastdef->type == ':')
511 <                wputs(": redefined constant expression\n");
512 <            else
513 <                wputs(": redefined\n");
514 <        }
508 >        if ((vdef = varlookup(qname)) != NULL)
509 >            if (vdef->def != NULL) {
510 >                wputs(qname);
511 >                if (vdef->def->type == ':')
512 >                    wputs(": redefined constant expression\n");
513 >                else
514 >                    wputs(": redefined\n");
515 >            }
516   #ifdef  FUNCTION
517 <        else if (ep->v.kid->type == FUNC && liblookup(qname) != NULL) {
518 <            wputs(qname);
519 <            wputs(": definition hides library function\n");
520 <        }
517 >            else if (ep->v.kid->type == FUNC && vdef->lib != NULL) {
518 >                wputs(qname);
519 >                wputs(": definition hides library function\n");
520 >            }
521   #endif
522   #endif
523          if (ep->type == ':')

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines