luaur_vm/functions/
lua_getcounters.rs1use crate::functions::lua_a_toobject::luaA_toobject;
2use crate::functions::lua_m_freearray::getcounters;
3use crate::macros::api_check::api_check;
4use crate::macros::clvalue::clvalue;
5use crate::macros::ttisfunction::ttisfunction;
6use crate::records::proto::Proto;
7use crate::type_aliases::lua_counter_function::lua_CounterFunction;
8use crate::type_aliases::lua_counter_value::lua_CounterValue;
9use crate::type_aliases::lua_state::lua_State;
10use crate::type_aliases::t_value::TValue;
11
12#[allow(non_snake_case)]
13pub unsafe fn lua_getcounters(
14 L: *mut lua_State,
15 funcindex: core::ffi::c_int,
16 context: *mut core::ffi::c_void,
17 functionvisit: lua_CounterFunction,
18 countervisit: lua_CounterValue,
19) {
20 let func: *const TValue = luaA_toobject(L, funcindex);
21 api_check!(L, ttisfunction!(func) && (*clvalue!(func)).isC == 0);
22
23 if (*(*L).global).ecb.getcounterdata.is_none() {
24 return;
25 }
26
27 let cl = clvalue!(func);
28 let lcl = core::ptr::addr_of!((*cl).inner.l).cast::<crate::records::closure::LClosure>();
29 let p = (*lcl).p;
30
31 getcounters(L, p as *mut Proto, context, functionvisit, countervisit);
32}