&& (opertok != '=' && tags[1] == 0 || opertok == '=' && resulttag == 0))
&& ((opertok != '=' && tags[1] == 0) || (opertok == '=' && resulttag == 0)))
operatoradjust(int opertok, symbol * sym, char *opername, int resulttag){   int                 tags[2] = { 0, 0 };   int                 count = 0;   arginfo            *arg;   char                tmpname[sNAMEMAX + 1];   symbol             *oldsym;   if (opertok == 0)      return TRUE;   /* count arguments and save (first two) tags */   while (arg = &sym->dim.arglist[count], arg->ident != 0)     {	if (count < 2)	  {	     if (arg->numtags > 1)		error(65, count + 1);	/* function argument may only have					 * a single tag */	     else if (arg->numtags == 1)		tags[count] = arg->tags[0];	  }			/* if */	if (opertok == '~' && count == 0)	  {	     if (arg->ident != iREFARRAY)		error(73, arg->name);	/* must be an array argument */	  }	else	  {	     if (arg->ident != iVARIABLE)		error(66, arg->name);	/* must be non-reference argument */	  }			/* if */	if (arg->hasdefault)	   error(59, arg->name);	/* arguments of an operator may not					 * have a default value */	count++;     }				/* while */   /* for '!', '++' and '--', count must be 1    * for '-', count may be 1 or 2    * for '=', count must be 1, and the resulttag is also important    * for all other (binary) operators and the special '~'    * operator, count must be 2    */   switch (opertok)     {     case '!':     case '=':     case tINC:     case tDEC:	if (count != 1)	   error(62);		/* number or placement of the operands does				 * not fit the operator */	break;     case '-':	if (count != 1 && count != 2)	   error(62);		/* number or placement of the operands does				 * not fit the operator */	break;     default:	if (count != 2)	   error(62);		/* number or placement of the operands does				 * not fit the operator */     }				/* switch */   if (tags[0] == 0       && (opertok != '=' && tags[1] == 0 || opertok == '=' && resulttag == 0))      error(64);		/* cannot change predefined operators */   /* change the operator name */   assert(strlen(opername) > 0);   operator_symname(tmpname, opername, tags[0], tags[1], count, resulttag);   if ((oldsym = findglb(tmpname)) != NULL)     {	int                 i;	if ((oldsym->usage & uDEFINE) != 0)	  {	     char                errname[2 * sNAMEMAX + 16];	     funcdisplayname(errname, tmpname);	     error(21, errname);	/* symbol already defined */	  }			/* if */	sym->usage |= oldsym->usage;	/* copy flags from the previous					 * definition */	for (i = 0; i < oldsym->numrefers; i++)	   if (oldsym->refer[i] != NULL)	      refer_symbol(sym, oldsym->refer[i]);	delete_symbol(&glbtab, oldsym);     }				/* if */   if ((sc_debug & sSYMBOLIC) != 0)      sym->addr += nameincells(tmpname) - nameincells(sym->name);   strcpy(sym->name, tmpname);   sym->hash = namehash(sym->name);	/* calculate new hash */   /* operators should return a value, except the '~' operator */   if (opertok != '~')      sym->usage |= uRETVALUE;   return TRUE;}