luaur_vm/functions/
sort_less.rs1use crate::functions::lua_l_error_l::lua_l_error_l;
2use crate::type_aliases::lua_state::lua_State;
3use crate::type_aliases::lua_table::LuaTable;
4use crate::type_aliases::sort_predicate::SortPredicate;
5use crate::type_aliases::t_value::TValue;
6
7use luaur_common::macros::luau_assert::LUAU_ASSERT;
8
9#[inline]
10pub unsafe fn sort_less(
11 L: *mut lua_State,
12 t: *mut LuaTable,
13 i: i32,
14 j: i32,
15 pred: SortPredicate,
16) -> i32 {
17 let arr = (*t).array;
18 let n = (*t).sizearray;
19
20 LUAU_ASSERT!((i as u32) < (n as u32) && (j as u32) < (n as u32));
21
22 let res = match pred {
23 Some(f) => f(L, arr.add(i as usize), arr.add(j as usize)),
24 None => 0,
25 };
26
27 if (*t).sizearray != n {
29 lua_l_error_l(
30 L,
31 c"table modified during sorting".as_ptr(),
32 core::format_args!("table modified during sorting"),
33 );
34 }
35
36 res
37}