rem: XFREE(p)
add: xfree(p);
context: dolet(tchar **v){	tchar *p;	tchar *vp, c, op;	bool hadsub;	int subscr;	v++;	p = *v++;	if (p == 0) {		prvars();		return;	}	do {		hadsub = 0;		for (vp = p; alnum(*p); p++)			continue;		if (vp == p || !letter(*vp))			goto letsyn;		if (*p == '[') {			hadsub++;			p = getinx(p, &subscr);		}		if (*p == 0 && *v)			p = *v++;		if (op = *p)			*p++ = 0;		else			goto letsyn;		vp = savestr(vp);		if (op == '=') {			c = '=';			p = xset(p, &v);		} else {			c = *p++;			/* if (any(c, "+-")) { */			if (c == '+' || c == '-') {				if (c != op || *p)					goto letsyn;				p = plusplus;			} else {				/*if (any(op, "<>")) {*/				if (op == '<' || op == '>') {					if (c != op)						goto letsyn;					c = *p++;letsyn:					bferr("Syntax error");				}				if (c != '=')					goto letsyn;				p = xset(p, &v);			}		}		if (op == '=')			if (hadsub)				asx(vp, subscr, p);			else				set(vp, p);		else			if (hadsub)#ifndef V6				/* avoid bug in vax CC */				{					struct varent *gv = getvx(vp, subscr);					asx(vp, subscr, operate(op, gv->vec[subscr - 1], p));				}#else				asx(vp, subscr, operate(op, getvx(vp, subscr)->vec[subscr - 1], p));#endif			else				set(vp, operate(op, value(vp), p));		if (eq(vp, S_path/*"path"*/)) {			exportpath(adrof(S_path/*"path"*/)->vec);			dohash(xhash);		}		if (eq(vp, S_cdpath/*"cdpath"*/))			dohash(xhash2);		XFREE(vp)		if (c != '=')			XFREE(p)	} while (p = *v++);}