/* Main operation less than or equal to; return 'l <= r'. If it needs a metamethod and there is no '__le', try '__lt', based on l <= r iff !(r < l) (assuming a total order). If the metamethod yields during this substitution, the continuation has to know about it (to negate the result of r<l); bit CIST_LEQ in the call status keeps that information.  */
int luaV_lessequal(lua_State *L, const TValue *l, const TValue *r)
/* Main operation less than or equal to; return 'l <= r'. If it needs a metamethod and there is no '__le', try '__lt', based on l <= r iff !(r < l) (assuming a total order). If the metamethod yields during this substitution, the continuation has to know about it (to negate the result of r<l); bit CIST_LEQ in the call status keeps that information.  */
int luaV_lessequal(lua_State *L, const TValue *l, const TValue *r)
{
    L->ci->callstatus |= CIST_LEQ;
    res = luaT_callorderTM(L, r, l, TM_LT);
    L->ci->callstatus ^= CIST_LEQ;
    if (res < 0)
      luaG_ordererror(L, l, r);
    return !res;
  }
}