Skip to main content

luaur_code_gen/functions/
initialize_execution_callbacks.rs

1use crate::macros::codegen_assert::CODEGEN_ASSERT;
2use crate::records::base_code_gen_context::BaseCodeGenContext;
3use crate::type_aliases::lua_state::lua_State;
4use luaur_vm::records::lua_execution_callbacks::lua_ExecutionCallbacks;
5
6pub fn initialize_execution_callbacks(
7    L: *mut lua_State,
8    code_gen_context: *mut BaseCodeGenContext,
9) {
10    CODEGEN_ASSERT!(!code_gen_context.is_null());
11
12    unsafe {
13        let ecb: *mut lua_ExecutionCallbacks = &mut (*(*L).global).ecb;
14
15        (*ecb).context = code_gen_context as *mut core::ffi::c_void;
16        (*ecb).close = Some(on_close_state);
17        (*ecb).destroy = Some(on_destroy_function);
18        (*ecb).enter = Some(on_enter);
19        (*ecb).disable = Some(on_disable);
20        (*ecb).getmemorysize = Some(get_memory_size);
21        (*ecb).getcounterdata = Some(get_counter_data);
22    }
23}
24
25extern "C" {
26    #[link_name = "luaur_on_close_state"]
27    fn on_close_state(L: *mut lua_State);
28    #[link_name = "luaur_on_destroy_function"]
29    fn on_destroy_function(L: *mut lua_State, proto: *mut luaur_vm::records::proto::Proto);
30    #[link_name = "luaur_on_enter"]
31    fn on_enter(L: *mut lua_State, proto: *mut luaur_vm::records::proto::Proto)
32        -> core::ffi::c_int;
33    #[link_name = "luaur_on_disable"]
34    fn on_disable(L: *mut lua_State, proto: *mut luaur_vm::records::proto::Proto);
35    #[link_name = "luaur_get_memory_size"]
36    fn get_memory_size(L: *mut lua_State, proto: *mut luaur_vm::records::proto::Proto) -> usize;
37    #[link_name = "luaur_get_counter_data"]
38    fn get_counter_data(
39        L: *mut lua_State,
40        proto: *mut luaur_vm::records::proto::Proto,
41        count: *mut usize,
42    ) -> *mut core::ffi::c_char;
43}