rem: eval2 (void)
add: eval2 (bool evaluate)
context: eval2 (void){  VALUE *l;  VALUE *r;  enum  {    less_than, less_equal, equal, not_equal, greater_equal, greater_than  } fxn;  int val;  intmax_t lval;  intmax_t rval;#ifdef EVAL_TRACE  trace ("eval2");#endif  l = eval3 ();  while (1)    {      if (nextarg ("<"))	fxn = less_than;      else if (nextarg ("<="))	fxn = less_equal;      else if (nextarg ("=") || nextarg ("=="))	fxn = equal;      else if (nextarg ("!="))	fxn = not_equal;      else if (nextarg (">="))	fxn = greater_equal;      else if (nextarg (">"))	fxn = greater_than;      else	return l;      r = eval3 ();      tostring (l);      tostring (r);      lval = strcoll (l->u.s, r->u.s);      rval = 0;      if (toarith (l) && toarith (r))	{	  lval = l->u.i;	  rval = r->u.i;	}      switch (fxn)	{	case less_than:     val = (lval <  rval); break;	case less_equal:    val = (lval <= rval); break;	case equal:         val = (lval == rval); break;	case not_equal:     val = (lval != rval); break;	case greater_equal: val = (lval >= rval); break;	case greater_than:  val = (lval >  rval); break;	default: abort ();	}      freev (l);      freev (r);      l = int_value (val);    }}