luaur_repl_cli/functions/
counters_value_callback.rs1use core::ffi::c_void;
2
3use luaur_code_gen::enums::code_gen_counter::CodeGenCounter;
4
5use crate::records::line_counters::LineCounters;
6use crate::records::module_counters::ModuleCounters;
7
8pub unsafe fn counters_value_callback(context: *mut c_void, kind: i32, line: i32, hits: u64) {
10 let counters = &mut *(context as *mut ModuleCounters);
11 let function = counters
12 .functions
13 .last_mut()
14 .expect("countersValueCallback called before countersFunctionCallback");
15
16 let entry = function
17 .counters
18 .entry(line)
19 .or_insert_with(LineCounters::default);
20
21 if kind == CodeGenCounter::RegularBlockExecuted as i32 {
22 entry.regularExecuted += hits;
23 } else if kind == CodeGenCounter::FallbackBlockExecuted as i32 {
24 entry.fallbackExecuted += hits;
25 } else if kind == CodeGenCounter::VmExitTaken as i32 {
26 entry.vmExitTaken += hits;
27 }
28}