luaur_vm/functions/
setarrayvector.rs1use crate::enums::lua_status::lua_Status;
2use crate::functions::lua_d_throw_ldo::luaD_throw;
3use crate::functions::lua_g_pusherror::lua_g_pusherror;
4use crate::functions::lua_m_realloc::lua_m_realloc_;
5use crate::macros::setnilvalue::setnilvalue;
6use crate::records::lua_table::LuaTable;
7use crate::type_aliases::lua_state::lua_State;
8use crate::type_aliases::t_value::TValue;
9use core::ffi::c_int;
10
11const MAXSIZE: c_int = 1 << 26;
12
13unsafe fn runerror(l: *mut lua_State, msg: *const core::ffi::c_char) -> ! {
14 lua_g_pusherror(l, msg);
15 luaD_throw(l, lua_Status::LUA_ERRRUN as c_int);
16}
17
18#[allow(non_snake_case)]
19pub unsafe fn setarrayvector(l: *mut lua_State, t: *mut LuaTable, size: c_int) {
20 if size > MAXSIZE {
21 runerror(l, c"table overflow".as_ptr());
22 }
23
24 let oldsize = (*t).sizearray;
25 let newarray = lua_m_realloc_(
26 l,
27 (*t).array as *mut core::ffi::c_void,
28 oldsize as usize * core::mem::size_of::<TValue>(),
29 size as usize * core::mem::size_of::<TValue>(),
30 (*t).memcat,
31 ) as *mut TValue;
32
33 (*t).array = newarray;
34
35 let mut i = oldsize;
36 while i < size {
37 setnilvalue!((*t).array.add(i as usize));
38 i += 1;
39 }
40
41 (*t).sizearray = size;
42}