--- ray/src/common/caldefn.c 2019/12/28 18:05:13 2.27 +++ ray/src/common/caldefn.c 2022/03/12 15:50:13 2.30 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: caldefn.c,v 2.27 2019/12/28 18:05:13 greg Exp $"; +static const char RCSid[] = "$Id: caldefn.c,v 2.30 2022/03/12 15:50:13 greg Exp $"; #endif /* * Store variable definitions. @@ -196,13 +196,15 @@ dremove( /* delete all definitions of name */ int -vardefined( /* return non-zero if variable defined */ +vardefined( /* return '=' or ':' if variable/constant defined */ char *name ) { EPNODE *dp; - return((dp = dlookup(name)) != NULL && dp->v.kid->type == SYM); + if ((dp = dlookup(name)) == NULL || dp->v.kid->type != SYM) + return(0); + return(dp->type); } @@ -637,6 +639,8 @@ getdefn(void) ep2 = newnode(); ep2->type = SYM; ep2->v.name = savestr(getname()); + if (strchr(ep2->v.name, CNTXMARK) != NULL) + syntax("illegal parameter name"); addekid(ep1, ep2); } while (nextc == ','); if (nextc != ')') @@ -702,7 +706,7 @@ getchan(void) /* A -> $N = E1 */ static double /* evaluate a variable */ -dvalue(char *name, EPNODE *d) +dvalue(char *name, EPNODE *d) { EPNODE *ep1, *ep2; @@ -714,6 +718,10 @@ dvalue(char *name, EPNODE *d) ep1 = d->v.kid->sibling; /* get expression */ if (ep1->type == NUM) return(ep1->v.num); /* return if number */ + if (esupport&E_RCONST && d->type == ':') { + wputs(name); + wputs(": assigned non-constant value\n"); + } ep2 = ep1->sibling; /* check time */ if (eclock >= MAXCLOCK) eclock = 1; /* wrap clock counter */