Skip to main content

luaur_compile_cli/functions/
serialize_block_linearization_stats.rs

1use 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}