luaur_compile_cli/functions/
serialize_block_linearization_stats.rs1use crate::macros::write_pair::WRITE_PAIR;
2use luaur_code_gen::records::block_linearization_stats::BlockLinearizationStats;
3
4#[repr(C)]
5pub struct FILE {
6 _unused: [u8; 0],
7}
8
9extern "C" {
10 pub fn fprintf(fp: *mut FILE, format: *const core::ffi::c_char, ...) -> core::ffi::c_int;
11}
12
13#[allow(non_camel_case_types)]
14pub mod libc {
15 pub use super::fprintf;
16}
17
18#[repr(C)]
19struct BlockLinearizationStatsRepr {
20 const_prop_instruction_count: u32,
21 time_seconds: f64,
22}
23
24pub fn serialize_block_linearization_stats(fp: *mut FILE, stats: &BlockLinearizationStats) {
25 let stats_repr = unsafe {
26 &*(stats as *const BlockLinearizationStats as *const BlockLinearizationStatsRepr)
27 };
28
29 unsafe {
30 fprintf(fp, c"{\n".as_ptr());
31
32 WRITE_PAIR!(
33 fp,
34 stats_repr,
35 " ",
36 const_prop_instruction_count,
37 "%u,\n"
38 );
39 WRITE_PAIR!(fp, stats_repr, " ", time_seconds, "%f\n");
40
41 fprintf(fp, c" }".as_ptr());
42 }
43}