luaur_vm/functions/
lua_settop.rs1use core::ffi::c_int;
2
3use crate::enums::lua_type::lua_Type;
4use crate::macros::api_check::api_check;
5use crate::macros::setnilvalue::setnilvalue;
6use crate::type_aliases::lua_state::lua_State;
7
8#[no_mangle]
9pub unsafe fn lua_settop(L: *mut lua_State, idx: c_int) {
10 if idx >= 0 {
11 api_check!(
12 L,
13 idx as isize <= unsafe { (*L).stack_last.offset_from((*L).base) }
14 );
15 while unsafe { (*L).top < (*L).base.add(idx as usize) } {
16 setnilvalue!(unsafe { (*L).top });
17 unsafe {
18 (*L).top = (*L).top.add(1);
19 }
20 }
21 unsafe {
22 (*L).top = (*L).base.add(idx as usize);
23 }
24 } else {
25 api_check!(
26 L,
27 -(idx + 1) as isize <= unsafe { (*L).top.offset_from((*L).base) }
28 );
29 unsafe {
30 (*L).top = (*L).top.offset((idx + 1) as isize); }
32 }
33}