luaur_vm/functions/
lua_unref.rs1use core::ffi::c_int;
2
3use crate::functions::lua_h_getnum::lua_h_getnum;
4use crate::macros::api_check::api_check;
5use crate::macros::hvalue::hvalue;
6use crate::macros::lua_o_nilobject::luaO_nilobject;
7use crate::macros::lua_refnil::LUA_REFNIL;
8use crate::macros::registry::registry;
9use crate::macros::setnvalue::setnvalue;
10use crate::records::global_state::global_State;
11use crate::records::lua_state::lua_State;
12use crate::type_aliases::lua_table::LuaTable;
13use crate::type_aliases::t_value::TValue;
14
15#[allow(non_snake_case)]
16pub unsafe fn lua_unref(L: *mut lua_State, ref_: c_int) {
17 if ref_ <= LUA_REFNIL {
18 return;
19 }
20
21 let g: *mut global_State = (*L).global;
22
23 let reg_tvalue_ptr: *const TValue = registry!(L);
26 let reg: *mut LuaTable = hvalue!(reg_tvalue_ptr) as *const _ as *mut LuaTable;
27
28 let slot: *const TValue = lua_h_getnum(reg, ref_);
29
30 api_check!(L, slot != luaO_nilobject);
31
32 let mutable_slot = slot as *mut TValue;
34
35 setnvalue!(mutable_slot, (*g).registryfree as f64);
37
38 (*g).registryfree = ref_;
39}