Skip to main content

luaur_vm/functions/
lua_h_clear.rs

1use 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;