Skip to main content

luaur_vm/macros/
dummynode.rs

1use crate::type_aliases::lua_node::LuaNode;
2
3/// The shared immutable empty-hash sentinel. Reference: `VM/src/ltable.cpp:48`
4/// `const LuaNode luaH_dummynode = {{{NULL},{0},LUA_TNIL}, {{NULL},{0},LUA_TNIL,0}};`
5///
6/// `LuaNode` holds raw pointers so it is not `Sync`; the wrapper asserts what
7/// the C++ global guarantees — the object is immutable shared data.
8#[repr(transparent)]
9pub struct DummyNodeSentinel(pub LuaNode);
10unsafe impl Sync for DummyNodeSentinel {}
11
12#[no_mangle]
13#[allow(non_upper_case_globals)]
14pub static luaH_dummynode: DummyNodeSentinel = DummyNodeSentinel(LuaNode {
15    val: crate::records::lua_t_value::TValue {
16        value: crate::type_aliases::value::Value {
17            p: core::ptr::null_mut(),
18        },
19        extra: [0],
20        tt: 0, // LUA_TNIL
21    },
22    key: crate::records::t_key::TKey {
23        value: crate::type_aliases::value::Value {
24            p: core::ptr::null_mut(),
25        },
26        extra: [0],
27        tt_next: 0, // tt=LUA_TNIL, next=0 (packed)
28    },
29});
30
31/// C++ `#define dummynode (&luaH_dummynode)`.
32#[allow(non_upper_case_globals)]
33pub const dummynode: *const LuaNode = &luaH_dummynode.0;
34
35#[allow(non_upper_case_globals)]
36pub const DUMMYNODE: *const LuaNode = dummynode;
37
38#[allow(non_upper_case_globals)]
39pub const luaH_dummynode_ptr: *const LuaNode = dummynode;