luaur_vm/functions/
lua_m_freearray.rs1use crate::functions::lua_g_getline::luaG_getline;
2use crate::macros::getstr::getstr;
3use crate::type_aliases::lua_counter_function::lua_CounterFunction;
4use crate::type_aliases::lua_counter_value::lua_CounterValue;
5use crate::type_aliases::lua_state::lua_State;
6use crate::type_aliases::proto::Proto;
7
8#[allow(non_snake_case)]
9pub(crate) unsafe fn getcounters(
10 L: *mut lua_State,
11 p: *mut Proto,
12 context: *mut core::ffi::c_void,
13 functionvisit: lua_CounterFunction,
14 countervisit: lua_CounterValue,
15) {
16 let p_ref = &*p;
17 if !p_ref.execdata.is_null() {
18 let l_ref = &*L;
19 let global = l_ref.global;
20 if !global.is_null() && !(*global).ecb.getcounterdata.is_none() {
21 let mut count: usize = 0;
22 let data = (*global).ecb.getcounterdata.unwrap()(L, p, &mut count as *mut usize);
23
24 if !data.is_null() && count != 0 {
25 let debugname = if !p_ref.debugname.is_null() {
26 getstr(p_ref.debugname)
27 } else {
28 core::ptr::null()
29 };
30 let linedefined = p_ref.linedefined;
31
32 if let Some(mut fv) = functionvisit {
33 fv(context, debugname, linedefined);
34 }
35
36 for i in 0..count {
37 let mut kind: u32 = 0;
38 let mut pcpos: u32 = 0;
39 let mut hits: u64 = 0;
40
41 let ptr = (data as *const u8).add(i * (4 + 4 + 8));
42 kind = core::ptr::read_unaligned(ptr as *const u32);
43 pcpos = core::ptr::read_unaligned(ptr.add(4) as *const u32);
44 hits = core::ptr::read_unaligned(ptr.add(8) as *const u64);
45
46 let line = if pcpos == !0u32 {
47 p_ref.linedefined
48 } else {
49 luaG_getline(p, pcpos as i32)
50 };
51
52 if let Some(mut cv) = countervisit {
53 cv(context, kind as i32, line, hits);
54 }
55 }
56 }
57 }
58 }
59
60 for i in 0..p_ref.sizep {
61 let child = *p_ref.p.add(i as usize);
62 getcounters(L, child, context, functionvisit, countervisit);
63 }
64}
65
66#[allow(non_snake_case)]
67pub unsafe fn lua_m_freearray(
68 L: *mut lua_State,
69 buffer: *mut core::ffi::c_void,
70 size: usize,
71 elem_size: usize,
72 memcat: u8,
73) {
74 let _ = (L, buffer, size, elem_size, memcat);
78}