Skip to main content

luaur_vm/functions/
lua_setlightuserdataname.rs

1use crate::macros::api_check::api_check;
2use crate::macros::fixedbit::FIXEDBIT;
3use crate::macros::l_setbit::l_setbit;
4use crate::macros::lua_lutag_limit::LUA_LUTAG_LIMIT;
5use crate::macros::lua_s_fix::luaS_fix;
6use crate::macros::lua_s_new::luaS_new;
7use crate::records::t_string::TString;
8use crate::type_aliases::lua_state::lua_State;
9
10#[no_mangle]
11#[allow(non_snake_case)]
12pub unsafe fn lua_setlightuserdataname(
13    L: *mut lua_State,
14    tag: core::ffi::c_int,
15    name: *const core::ffi::c_char,
16) {
17    api_check!(L, (tag as u32) < LUA_LUTAG_LIMIT as u32);
18    // renaming not supported
19    api_check!(L, (*(*L).global).lightuserdataname[tag as usize].is_null());
20
21    if (*(*L).global).lightuserdataname[tag as usize].is_null() {
22        let ts = luaS_new(L, name);
23        (*(*L).global).lightuserdataname[tag as usize] = ts;
24        l_setbit!((*ts).hdr.marked, FIXEDBIT); // never collect these names
25    }
26}