luaur_vm/functions/
lua_v_lessequal.rs1use crate::enums::tms::TMS;
2use crate::functions::call_order_tm::call_orderTM;
3use crate::functions::lua_g_ordererror::luaG_ordererror;
4use crate::functions::lua_v_strcmp::luaV_strcmp;
5use crate::macros::luai_numle::luai_numle;
6use crate::macros::nvalue::nvalue;
7use crate::macros::tsvalue::tsvalue;
8use crate::macros::ttisnumber::ttisnumber;
9use crate::macros::ttisstring::ttisstring;
10use crate::macros::ttype::ttype;
11use crate::records::lua_state::lua_State;
12use crate::type_aliases::t_value::TValue;
13
14#[allow(non_snake_case)]
15pub unsafe fn lua_v_lessequal(L: *mut lua_State, l: *const TValue, r: *const TValue) -> i32 {
16 let mut res: i32 = 0;
17
18 if ttype!(l) != ttype!(r) {
19 luaG_ordererror(L, l, r, TMS::TM_LE);
20 } else if ttisnumber!(l) {
21 return luai_numle(nvalue!(l), nvalue!(r)) as i32;
22 } else if ttisstring!(l) {
23 return (luaV_strcmp(tsvalue!(l), tsvalue!(r)) <= 0) as i32;
24 } else if {
25 res = call_orderTM(L, l, r, TMS::TM_LE, false);
26 res != -1
27 } {
28 return res;
30 } else if {
31 res = call_orderTM(L, r, l, TMS::TM_LT, false);
32 res == -1
33 } {
34 luaG_ordererror(L, l, r, TMS::TM_LE);
36 }
37
38 (res == 0) as i32
39}
40
41#[export_name = "luaV_lessequal"]
42pub unsafe extern "C" fn lua_v_lessequal_export(
43 L: *mut lua_State,
44 l: *const TValue,
45 r: *const TValue,
46) -> i32 {
47 lua_v_lessequal(L, l, r)
48}