use crate::enums::lua_type::lua_Type;
use crate::functions::lua_l_addlstring::lua_l_addlstring;
use crate::functions::lua_l_addvalue::lua_l_addvalue;
use crate::functions::lua_l_typename::lua_l_typename;
use crate::functions::lua_rawgeti::lua_rawgeti;
use crate::macros::getstr::getstr;
use crate::macros::lua_l_error::luaL_error;
use crate::macros::tsvalue::tsvalue;
use crate::macros::ttisstring::ttisstring;
use crate::records::lua_l_strbuf::LuaLStrbuf;
use crate::records::lua_table::LuaTable;
use crate::type_aliases::lua_state::lua_State;
use core::ffi::c_int;
pub fn addfield(L: *mut lua_State, b: *mut LuaLStrbuf, i: i32, t: *mut LuaTable) {
unsafe {
if !t.is_null()
&& ((i - 1) as u32) < (*t).sizearray as u32
&& ttisstring!((*t).array.add((i - 1) as usize))
{
let ts = tsvalue!((*t).array.add((i - 1) as usize));
lua_l_addlstring(b, getstr(ts), (*ts).len as usize);
} else {
let tt = lua_rawgeti(L, 1, i);
if tt != lua_Type::LUA_TSTRING as c_int && tt != lua_Type::LUA_TNUMBER as c_int {
let tn = core::ffi::CStr::from_ptr(lua_l_typename(L, -1)).to_string_lossy();
luaL_error!(
L,
"invalid value ({}) at index {} in table for 'concat'",
tn,
i
);
}
lua_l_addvalue(b);
}
}
}