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 |
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 |
|
|
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) { |
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++; |
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); |