luaur_code_gen/functions/
log_function_header.rs1use luaur_vm::macros::getstr::getstr;
2
3use crate::functions::try_find_local_name::try_find_local_name;
4use crate::traits::LogAppend;
5
6#[allow(non_snake_case)]
7pub unsafe fn log_function_header(
8 build: &mut dyn LogAppend,
9 proto: *mut luaur_vm::records::proto::Proto,
10) {
11 let debugname = (*proto).debugname;
12 if !debugname.is_null() {
13 let name = getstr(debugname as *const _);
14 let name_str = unsafe { core::ffi::CStr::from_ptr(name).to_string_lossy() };
15 build.log_append(format_args!("; function {}(", name_str));
16 } else {
17 build.log_append(format_args!("; function("));
18 }
19
20 for i in 0..(*proto).numparams as i32 {
21 let name = try_find_local_name(proto, i, 0);
22 if !name.is_null() {
23 let name_str = unsafe { core::ffi::CStr::from_ptr(name).to_string_lossy() };
24 if i == 0 {
25 build.log_append(format_args!("{}", name_str));
26 } else {
27 build.log_append(format_args!(", {}", name_str));
28 }
29 } else {
30 if i == 0 {
31 build.log_append(format_args!("$arg{}", i));
32 } else {
33 build.log_append(format_args!(", $arg{}", i));
34 }
35 }
36 }
37
38 if (*proto).numparams != 0 && (*proto).is_vararg != 0 {
39 build.log_append(format_args!(", ...)"));
40 } else {
41 build.log_append(format_args!(")"));
42 }
43
44 if (*proto).linedefined >= 0 {
45 build.log_append(format_args!(" line {}\n", (*proto).linedefined));
46 } else {
47 build.log_append(format_args!("\n"));
48 }
49}