Skip to main content

luaur_code_gen/functions/
get_memory_size.rs

1use crate::functions::get_native_proto_exec_data_header_native_proto_exec_data::get_native_proto_exec_data_header_mut;
2use crate::records::native_proto_exec_data_header::NativeProtoExecDataHeader;
3use crate::type_aliases::instruction_ir_builder::Instruction;
4use crate::type_aliases::lua_state::lua_State;
5use luaur_vm::records::proto::Proto;
6
7pub fn get_memory_size(L: *mut lua_State, proto: *mut Proto) -> usize {
8    let proto_ref = unsafe { &*proto };
9    let exec_data_header =
10        unsafe { &*get_native_proto_exec_data_header_mut(proto_ref.execdata as *mut u32) };
11
12    let exec_data_size = core::mem::size_of::<NativeProtoExecDataHeader>()
13        + (exec_data_header.bytecode_instruction_count as usize)
14            * core::mem::size_of::<Instruction>();
15
16    exec_data_size + exec_data_header.native_code_size
17}
18
19#[export_name = "get_memory_size"]
20pub unsafe extern "C" fn get_memory_size_export(L: *mut lua_State, proto: *mut Proto) -> usize {
21    get_memory_size(L, proto)
22}