luaur_compile_cli/functions/
serialize_compile_stats.rs1use 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}