Skip to main content

luaur_vm/functions/
tcreate.rs

1use crate::functions::lua_createtable::lua_createtable;
2use crate::functions::lua_l_checkinteger::lua_l_checkinteger;
3use crate::luaL_argerror;
4use crate::macros::hvalue::hvalue;
5use crate::macros::lua_isnoneornil::lua_isnoneornil;
6use crate::setobj2t;
7use crate::type_aliases::lua_state::lua_State;
8use crate::type_aliases::stk_id::StkId;
9use crate::type_aliases::t_value::TValue;
10
11#[no_mangle]
12pub unsafe fn tcreate(L: *mut lua_State) -> core::ffi::c_int {
13    let size = lua_l_checkinteger(L, 1);
14    if size < 0 {
15        luaL_argerror!(L, 1, "size out of range");
16    }
17
18    if !lua_isnoneornil!(L, 2) {
19        lua_createtable(L, size as core::ffi::c_int, 0);
20        let t = hvalue!((*L).top.offset(-1));
21
22        let v: StkId = (*L).base.add(1);
23
24        for i in 0..size as usize {
25            let e: *mut TValue = (*t).array.add(i);
26            setobj2t!(L, e, v);
27        }
28    } else {
29        lua_createtable(L, size as core::ffi::c_int, 0);
30    }
31
32    1
33}