Skip to main content

luaur_compile_cli/functions/
serialize_compile_stats.rs

1use crate::functions::serialize_lowering_stats::serialize_lowering_stats;
2use crate::macros::write_name::WRITE_NAME;
3use crate::macros::write_pair::WRITE_PAIR;
4use crate::records::compile_stats::CompileStats;
5use luaur_code_gen::records::lowering_stats::LoweringStats;
6
7#[repr(C)]
8pub struct FILE {
9    _unused: [u8; 0],
10}
11
12extern "C" {
13    pub fn fprintf(fp: *mut FILE, format: *const core::ffi::c_char, ...) -> core::ffi::c_int;
14}
15
16#[allow(non_camel_case_types)]
17pub mod libc {
18    pub use super::fprintf;
19}
20
21pub fn serialize_compile_stats(fp: *mut FILE, stats: &CompileStats) {
22    unsafe {
23        fprintf(fp, c"{\n".as_ptr());
24
25        WRITE_PAIR!(fp, stats, "        ", lines, "%zu,\n");
26        WRITE_PAIR!(fp, stats, "        ", bytecode, "%zu,\n");
27        WRITE_PAIR!(fp, stats, "        ", bytecode_instruction_count, "%zu,\n");
28        WRITE_PAIR!(fp, stats, "        ", codegen, "%zu,\n");
29        WRITE_PAIR!(fp, stats, "        ", read_time, "%f,\n");
30        WRITE_PAIR!(fp, stats, "        ", misc_time, "%f,\n");
31        WRITE_PAIR!(fp, stats, "        ", parse_time, "%f,\n");
32        WRITE_PAIR!(fp, stats, "        ", compile_time, "%f,\n");
33        WRITE_PAIR!(fp, stats, "        ", codegen_time, "%f,\n");
34
35        WRITE_NAME!(fp, "        ", lower_stats);
36        serialize_lowering_stats(fp as *mut core::ffi::c_void, &stats.lower_stats);
37
38        fprintf(fp, c"\n    }".as_ptr());
39    }
40}