rem: int neg;
add: bool neg;
context: toarith (VALUE *v){  intmax_t i;  int neg;  char *cp;  switch (v->type)    {    case integer:      return 1;    case string:      i = 0;      cp = v->u.s;      neg = (*cp == '-');      if (neg)	cp++;      do	{	  if (ISDIGIT (*cp))	    i = i * 10 + *cp - '0';	  else	    return 0;	}      while (*++cp);      free (v->u.s);      v->u.i = i * (neg ? -1 : 1);      v->type = integer;      return 1;    default:      abort ();    }}