/* Emit code for binary expressions that "produce values" (everything but logical operators 'and'/'or' and comparison operators). Expression to produce final result will be encoded in 'e1'. Because 'luaK_exp2RK' can free registers, its calls must be in "stack order" (that is, first on 'e2', which may have more recent registers to be released).  */
static void codebinexpval(FuncState *fs, OpCode op, expdesc *e1, expdesc *e2, int line)
/* Emit code for binary expressions that "produce values" (everything but logical operators 'and'/'or' and comparison operators). Expression to produce final result will be encoded in 'e1'. Because 'luaK_exp2RK' can free registers, its calls must be in "stack order" (that is, first on 'e2', which may have more recent registers to be released).  */
static void codebinexpval(FuncState *fs, OpCode op, expdesc *e1, expdesc *e2, int line)
{
  int rk2 = luaK_exp2RK(fs, e2);
  int rk1 = luaK_exp2RK(fs, e1);
  freeexps(fs, e1, e2);
  e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2);
  e1->k = VRELOCABLE;
  luaK_addlineinfo(fs, fs->pc -1, line);
}