rem: r = eval5 (); if (!toarith (l) || !toarith (r)) error (2, 0, _("non-numeric argument")); if (fxn == multiply) val = l->u.i * r->u.i; else
add: r = eval5 (evaluate); if (evaluate)
context: eval4 (void){  VALUE *l;  VALUE *r;  enum { multiply, divide, mod } fxn;  intmax_t val;#ifdef EVAL_TRACE  trace ("eval4");#endif  l = eval5 ();  while (1)    {      if (nextarg ("*"))	fxn = multiply;      else if (nextarg ("/"))	fxn = divide;      else if (nextarg ("%"))	fxn = mod;      else	return l;      r = eval5 ();      if (!toarith (l) || !toarith (r))	error (2, 0, _("non-numeric argument"));      if (fxn == multiply)	val = l->u.i * r->u.i;      else	{	  if (r->u.i == 0)	    error (2, 0, _("division by zero"));	  val = fxn == divide ? l->u.i / r->u.i : l->u.i % r->u.i;	}      freev (l);      freev (r);      l = int_value (val);    }}