Skip to main content

luaur_vm/functions/
arrayornewkey.rs

1use crate::functions::newkey::newkey;
2use crate::macros::cast_num::cast_num;
3use crate::macros::luai_num_2_int::luai_num2int;
4use crate::macros::luai_numeq::luai_numeq;
5use crate::macros::nvalue::nvalue;
6use crate::macros::ttisnumber::ttisnumber;
7use crate::records::lua_table::LuaTable;
8use crate::type_aliases::lua_state::lua_State;
9use crate::type_aliases::t_value::TValue;
10
11#[allow(non_snake_case)]
12pub unsafe fn arrayornewkey(
13    l: *mut lua_State,
14    t: *mut LuaTable,
15    key: *const TValue,
16) -> *mut TValue {
17    if ttisnumber!(key) {
18        let mut k: core::ffi::c_int = 0;
19        let n = nvalue!(key);
20        luai_num2int!(k, n);
21
22        if luai_numeq(cast_num!(k), n)
23            && (k as core::ffi::c_uint).wrapping_sub(1) < (*t).sizearray as core::ffi::c_uint
24        {
25            return (*t).array.add((k - 1) as usize);
26        }
27    }
28
29    newkey(l, t, key)
30}