luaur_vm/functions/
dumpclass.rs1use crate::functions::dumpref::dumpref;
2use crate::functions::dumprefs::dumprefs;
3use crate::functions::dumpstringdata::dumpstringdata;
4use crate::macros::obj_2_gco::obj2gco;
5use crate::records::gc_object::GCObject;
6use crate::records::luau_class::LuauClass;
7
8#[allow(non_snake_case)]
9pub(crate) unsafe fn dumpclass(f: *mut core::ffi::c_void, lco: *mut LuauClass) {
10 let lco = &*lco;
11
12 extern "C" {
13 fn fprintf(
14 stream: *mut core::ffi::c_void,
15 format: *const core::ffi::c_char,
16 ...
17 ) -> core::ffi::c_int;
18 fn fputc(character: core::ffi::c_int, stream: *mut core::ffi::c_void) -> core::ffi::c_int;
19 }
20
21 fprintf(
22 f,
23 b"{\"type\":\"class\",\"cat\":%d,\"size\":%d\0".as_ptr() as *const core::ffi::c_char,
24 lco.memcat as core::ffi::c_int,
25 core::mem::size_of::<LuauClass>() as core::ffi::c_int,
26 );
27
28 fprintf(f, b",\"name\":\0".as_ptr() as *const core::ffi::c_char);
29 dumpstringdata(f, (*lco.name).data.as_ptr(), (*lco.name).len as usize);
30
31 fprintf(
32 f,
33 b",\"membernames\":[\0".as_ptr() as *const core::ffi::c_char,
34 );
35 for i in 0..lco.numberofallmembers {
36 if i != 0 {
37 fputc(',' as core::ffi::c_int, f);
38 }
39 dumpref(f, *lco.offsettomember.add(i as usize) as *mut GCObject);
40 }
41
42 fprintf(
43 f,
44 b"],\"staticmembers\":[\0".as_ptr() as *const core::ffi::c_char,
45 );
46 dumprefs(
47 f,
48 lco.staticmembers,
49 (lco.numberofallmembers - lco.numberofinstancemembers) as usize,
50 );
51
52 fprintf(
53 f,
54 b"],\"metatable\":\0".as_ptr() as *const core::ffi::c_char,
55 );
56 dumpref(f, lco.metatable as *mut GCObject);
57
58 fprintf(
59 f,
60 b",\"instancemetatable\":\0".as_ptr() as *const core::ffi::c_char,
61 );
62 if !lco.instancemetatable.is_null() {
63 dumpref(f, lco.instancemetatable as *mut GCObject);
64 } else {
65 fprintf(f, b"null\0".as_ptr() as *const core::ffi::c_char);
66 }
67
68 fprintf(
69 f,
70 b",\"memberstooffset\":\0".as_ptr() as *const core::ffi::c_char,
71 );
72 dumpref(f, lco.memberstooffset as *mut GCObject);
73
74 fprintf(f, b"}\0".as_ptr() as *const core::ffi::c_char);
75}