luaur_vm/functions/
lua_c_upvalclosed.rs1use crate::macros::gc_spause::GCSpause;
5use crate::macros::gray_2_black::gray2black;
6use crate::macros::isgray::isgray;
7use crate::macros::keepinvariant::keepinvariant;
8use crate::macros::lua_c_barrier::luaC_barrier;
9use crate::macros::makewhite::makewhite;
10use crate::macros::upisopen::upisopen;
11use crate::records::gc_object::GCObject;
12use crate::records::up_val::UpVal;
13use crate::type_aliases::lua_state::lua_State;
14use luaur_common::macros::luau_assert::LUAU_ASSERT;
15
16#[allow(non_snake_case)]
17pub unsafe fn luaC_upvalclosed(l: *mut lua_State, uv: *mut UpVal) {
18 let g = (*l).global;
19 let o = uv as *mut GCObject;
20
21 LUAU_ASSERT!(!upisopen!(uv)); if isgray!(o) {
24 if keepinvariant(g) {
25 gray2black!(o); luaC_barrier!(l, uv, (*uv).v);
27 } else {
28 makewhite!(g, o);
30 LUAU_ASSERT!((*g).gcstate as i32 != GCSpause);
31 }
32 }
33}
34
35#[allow(unused_imports)]
36pub use luaC_upvalclosed as lua_c_upvalclosed;