luaur_vm/functions/
lua_h_clear.rs1use crate::enums::lua_type::lua_Type;
2use crate::macros::dummynode::dummynode;
3use crate::macros::setnilvalue::setnilvalue;
4use crate::macros::sizenode::sizenode;
5use crate::records::lua_node::LuaNode;
6use crate::records::lua_table::LuaTable;
7
8#[inline]
9unsafe fn maybesetaboundary(t: *mut LuaTable, boundary: core::ffi::c_int) {
10 if (*t).union.aboundary <= 0 {
11 (*t).union.aboundary = -boundary;
12 }
13}
14
15#[allow(non_snake_case)]
16pub unsafe fn lua_h_clear(tt: *mut LuaTable) {
17 let mut i = 0;
18 while i < (*tt).sizearray {
19 setnilvalue!((*tt).array.add(i as usize));
20 i += 1;
21 }
22
23 maybesetaboundary(tt, 0);
24
25 if (*tt).node != dummynode as *mut LuaNode {
26 let size = sizenode!(tt);
27 (*tt).union.lastfree = size;
28
29 let mut i = 0;
30 while i < size {
31 let n = (*tt).node.add(i as usize);
32 (*n).key.value = Default::default();
33 (*n).key.extra = [0];
34 (*n).key.set_tt(lua_Type::LUA_TNIL as i32);
35 setnilvalue!(core::ptr::addr_of_mut!((*n).val));
36 (*n).key.set_next(0);
37 i += 1;
38 }
39 }
40
41 (*tt).tmcache = !0u8;
42}
43
44#[allow(unused_imports)]
45pub use lua_h_clear as luaH_clear;