Skip to main content

luaur_vm/records/
load_context.rs

1use crate::records::proto::Proto;
2use crate::records::t_string::TString;
3use crate::records::temp_buffer::TempBuffer;
4use crate::type_aliases::lua_state::lua_State;
5
6#[allow(non_camel_case_types)]
7#[repr(C)]
8#[derive(Debug)]
9pub struct LoadContext {
10    pub(crate) strings: TempBuffer<*mut TString>,
11    pub(crate) protos: TempBuffer<*mut Proto>,
12    pub(crate) chunkname: *const core::ffi::c_char,
13    pub(crate) data: *const core::ffi::c_char,
14    pub(crate) size: usize,
15    pub(crate) env: i32,
16    pub(crate) result: i32,
17}
18
19impl LoadContext {
20    #[allow(non_snake_case)]
21    pub(crate) unsafe extern "C" fn run(L: lua_State, ud: *mut core::ffi::c_void) {
22        let ctx = &mut *(ud as *mut LoadContext);
23
24        ctx.result = loadsafe(
25            L,
26            &mut ctx.strings,
27            &mut ctx.protos,
28            ctx.chunkname,
29            ctx.data,
30            ctx.size,
31            ctx.env,
32        );
33    }
34}
35
36extern "C" {
37    fn loadsafe(
38        L: lua_State,
39        strings: *mut TempBuffer<*mut TString>,
40        protos: *mut TempBuffer<*mut Proto>,
41        chunkname: *const core::ffi::c_char,
42        data: *const core::ffi::c_char,
43        size: usize,
44        env: i32,
45    ) -> i32;
46}