luaur_vm/functions/
lua_registeruserdatadirectaccess.rs1use core::ffi::c_int;
2
3use crate::functions::lua_concat::lua_c_threadbarrier_lapi;
4use crate::macros::api_check::api_check;
5use crate::macros::fasttm::fasttm;
6use crate::macros::lua_utag_limit::LUA_UTAG_LIMIT;
7use crate::records::lua_state::lua_State;
8use crate::type_aliases::lua_userdata_direct_access::lua_UserdataDirectAccess;
9use crate::type_aliases::lua_userdata_direct_namecall::lua_UserdataDirectNamecall;
10use crate::type_aliases::tms::TMS;
11
12#[allow(non_snake_case)]
13pub unsafe fn lua_registeruserdatadirectaccess(
14 L: *mut lua_State,
15 tag: c_int,
16 get: lua_UserdataDirectAccess,
17 set: lua_UserdataDirectAccess,
18 namecall: lua_UserdataDirectNamecall,
19) -> c_int {
20 api_check!(L, (tag as u32) < LUA_UTAG_LIMIT as u32);
21 lua_c_threadbarrier_lapi(L);
22
23 let h = (*(*L).global).udatamt[tag as usize];
24 if !h.is_null() {
25 let udatadirect = &mut (*(*L).global).udatadirect[tag as usize];
26
27 let indextm = fasttm(L, h, TMS::TM_INDEX as c_int);
28 if !indextm.is_null() {
29 udatadirect.indextm = *indextm;
30 udatadirect.index = get;
31 }
32
33 let newindextm = fasttm(L, h, TMS::TM_NEWINDEX as c_int);
34 if !newindextm.is_null() {
35 udatadirect.newindextm = *newindextm;
36 udatadirect.newindex = set;
37 }
38
39 let namecalltm = fasttm(L, h, TMS::TM_NAMECALL as c_int);
40 if !namecalltm.is_null() {
41 udatadirect.namecalltm = *namecalltm;
42 udatadirect.namecall = namecall;
43 }
44
45 return 1;
46 }
47
48 0
49}