luaur_vm/functions/
lua_f_closeupval.rs1use crate::functions::lua_c_upvalclosed::luaC_upvalclosed;
5use crate::macros::setobj::setobj;
6use crate::records::up_val::UpVal;
7use crate::type_aliases::lua_state::lua_State;
8use crate::type_aliases::t_value::TValue;
9use luaur_common::macros::luau_assert::LUAU_ASSERT;
10
11#[allow(non_snake_case)]
12pub unsafe fn luaF_closeupval(l: *mut lua_State, uv: *mut UpVal, dead: bool) {
13 LUAU_ASSERT!((*(*uv).u.open.next).u.open.prev == uv && (*(*uv).u.open.prev).u.open.next == uv);
15 (*(*uv).u.open.next).u.open.prev = (*uv).u.open.prev;
16 (*(*uv).u.open.prev).u.open.next = (*uv).u.open.next;
17
18 if dead {
19 return;
20 }
21
22 let value = core::ptr::addr_of_mut!((*uv).u.value) as *mut TValue;
23 setobj!(l, value, (*uv).v);
24 (*uv).v = value;
25 luaC_upvalclosed(l, uv);
26}
27
28#[allow(unused_imports)]
29pub use luaF_closeupval as lua_f_closeupval;