Skip to main content

luaur_vm/functions/
dumpobject.rs

1use crate::functions::dumpref::dumpref;
2use crate::functions::dumprefs::dumprefs;
3use crate::macros::obj_2_gco::obj2gco;
4use crate::type_aliases::luau_object::LuauObject;
5use core::ffi::{c_char, c_int, c_void};
6
7#[allow(non_snake_case)]
8pub(crate) unsafe fn dumpobject(f: *mut c_void, inst: *mut LuauObject) {
9    extern "C" {
10        fn fprintf(stream: *mut c_void, format: *const c_char, ...) -> c_int;
11    }
12
13    let inst_ref = &*inst;
14
15    fprintf(
16        f,
17        b"{\"type\":\"object\",\"cat\":%d,\"size\":%d\0".as_ptr() as *const c_char,
18        inst_ref.memcat as c_int,
19        core::mem::size_of::<LuauObject>() as c_int,
20    );
21
22    fprintf(f, b",\"class\":\0".as_ptr() as *const c_char);
23    dumpref(f, obj2gco!(inst_ref.lclass));
24
25    fprintf(f, b",\"members\":\0".as_ptr() as *const c_char);
26    dumprefs(f, inst_ref.members, inst_ref.numberofmembers as usize);
27
28    fprintf(f, b"]}\0".as_ptr() as *const c_char);
29}