Skip to main content

luaur_vm/macros/
lua_o_nilobject.rs

1use crate::type_aliases::t_value::TValue;
2use crate::type_aliases::value::Value;
3
4/// The shared immutable nil sentinel. Reference: `VM/src/lobject.cpp:16`
5/// `const TValue luaO_nilobject_ = {{NULL}, {0}, LUA_TNIL};`
6///
7/// `TValue` holds raw pointers so it is not `Sync`; the wrapper asserts what
8/// the C++ global guarantees — the object is immutable shared data.
9#[repr(transparent)]
10pub struct NilSentinel(pub TValue);
11unsafe impl Sync for NilSentinel {}
12
13#[no_mangle]
14#[allow(non_upper_case_globals)]
15pub static luaO_nilobject_: NilSentinel = NilSentinel(TValue {
16    value: Value {
17        p: core::ptr::null_mut(),
18    },
19    extra: [0],
20    tt: 0, // LUA_TNIL
21});
22
23/// C++ `#define luaO_nilobject (&luaO_nilobject_)`.
24#[allow(non_upper_case_globals)]
25pub const luaO_nilobject: *const TValue = &luaO_nilobject_.0 as *const TValue;