1use std::ffi::c_void;
2use std::os::raw::{c_char, c_double, c_int, c_longlong, c_ulonglong};
3
4pub type LuaFunction = extern "C" fn(*mut LuaState) -> c_int;
5pub type LuaContinuation = unsafe extern "C" fn(*mut LuaState, c_int, isize) -> c_int;
6pub type LuaReader = unsafe extern "C" fn(*mut LuaState, *mut c_void, *mut usize) -> *const c_char;
7pub type LuaWriter =
8 unsafe extern "C" fn(*mut LuaState, *const c_void, usize, *mut c_void) -> c_int;
9pub type LuaAlloc = unsafe extern "C" fn(*mut c_void, *mut c_void, usize, usize) -> *mut c_void;
10
11#[repr(C)]
12pub struct BootstrapContext {
13 pub revision: u32,
14 pub name: *const c_char,
15 pub locenv: *const c_void,
16 pub lua: *mut LuaState,
17 pub working_directory: *const c_char,
18}
19
20#[repr(C)]
21pub struct LuaState {
22 private: [u8; 0],
23}
24
25#[repr(C)]
26pub struct LuaReg {
27 pub name: *const c_char,
28 pub func: Option<LuaFunction>,
29}
30
31#[repr(C)]
32pub struct ApiTable {
33 pub revision: u32,
34
35 pub lua_pushboolean: unsafe extern "C" fn(*mut LuaState, c_int),
36 pub lua_pushcclosure: extern "C" fn(*mut LuaState, LuaFunction, c_int),
37 pub lua_pushfstring: unsafe extern "C" fn(*mut LuaState, *const c_char, ...) -> *const c_char,
38 pub lua_pushinteger: unsafe extern "C" fn(*mut LuaState, c_longlong),
39 pub lua_pushlightuserdata: extern "C" fn(*mut LuaState, *mut u8),
40 pub lua_pushlstring: unsafe extern "C" fn(*mut LuaState, *const c_char, usize) -> *const c_char,
41 pub lua_pushnil: extern "C" fn(*mut LuaState),
42 pub lua_pushnumber: unsafe extern "C" fn(*mut LuaState, c_double),
43 pub lua_pushstring: unsafe extern "C" fn(*mut LuaState, *const c_char) -> *const c_char,
44 pub lua_pushthread: unsafe extern "C" fn(*mut LuaState) -> c_int,
45 pub lua_pushvalue: extern "C" fn(*mut LuaState, c_int),
46 pub lua_pushvfstring:
47 unsafe extern "C" fn(*mut LuaState, *const c_char, *mut c_void) -> *const c_char,
48 pub lua_createtable: extern "C" fn(*mut LuaState, c_int, c_int),
49 pub lua_newuserdatauv: extern "C" fn(*mut LuaState, usize, c_int) -> *mut u8,
50
51 pub lua_settable: extern "C" fn(*mut LuaState, c_int),
52 pub lua_rawset: unsafe extern "C" fn(*mut LuaState, c_int),
53 pub lua_seti: unsafe extern "C" fn(*mut LuaState, c_int, c_longlong),
54 pub lua_rawseti: unsafe extern "C" fn(*mut LuaState, c_int, c_longlong),
55 pub lua_setfield: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char),
56 pub lua_rawsetp: unsafe extern "C" fn(*mut LuaState, c_int, *const c_void),
57 pub lua_setmetatable: extern "C" fn(*mut LuaState, c_int) -> c_int,
58 pub lua_setiuservalue: unsafe extern "C" fn(*mut LuaState, c_int, c_int) -> c_int,
59
60 pub lua_iscfunction: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
61 pub lua_isinteger: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
62 pub lua_isnumber: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
63 pub lua_isstring: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
64 pub lua_isuserdata: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
65 pub lua_type: extern "C" fn(*mut LuaState, c_int) -> c_int,
66 pub lua_typename: unsafe extern "C" fn(*mut LuaState, c_int) -> *const c_char,
67 pub lua_getmetatable: extern "C" fn(*mut LuaState, c_int) -> c_int,
68
69 pub lua_toboolean: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
70 pub lua_tocfunction: unsafe extern "C" fn(*mut LuaState, c_int) -> LuaFunction,
71 pub lua_tointegerx: unsafe extern "C" fn(*mut LuaState, c_int, *mut c_int) -> c_longlong,
72 pub lua_tolstring: unsafe extern "C" fn(*mut LuaState, c_int, *mut usize) -> *const c_char,
73 pub lua_tonumberx: unsafe extern "C" fn(*mut LuaState, c_int, *mut c_int) -> c_double,
74 pub lua_topointer: unsafe extern "C" fn(*mut LuaState, c_int) -> *const c_void,
75 pub lua_tothread: unsafe extern "C" fn(*mut LuaState, c_int) -> *mut LuaState,
76 pub lua_touserdata: extern "C" fn(*mut LuaState, c_int) -> *mut u8,
77
78 pub lua_geti: unsafe extern "C" fn(*mut LuaState, c_int, c_longlong) -> c_int,
79 pub lua_rawgeti: unsafe extern "C" fn(*mut LuaState, c_int, c_longlong) -> c_int,
80 pub lua_gettable: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
81 pub lua_rawget: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
82 pub lua_getfield: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
83 pub lua_rawgetp: unsafe extern "C" fn(*mut LuaState, c_int, *const c_void) -> c_int,
84 pub lua_next: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
85 pub lua_getiuservalue: unsafe extern "C" fn(*mut LuaState, c_int, c_int) -> c_int,
86
87 pub lua_getglobal: unsafe extern "C" fn(*mut LuaState, *const c_char) -> c_int,
88 pub lua_setglobal: unsafe extern "C" fn(*mut LuaState, *const c_char),
89
90 pub lua_gettop: unsafe extern "C" fn(*mut LuaState) -> c_int,
91 pub lua_settop: extern "C" fn(*mut LuaState, c_int),
92
93 pub lua_callk: unsafe extern "C" fn(*mut LuaState, c_int, c_int, isize, LuaContinuation),
94 pub lua_pcallk:
95 unsafe extern "C" fn(*mut LuaState, c_int, c_int, c_int, isize, LuaContinuation) -> c_int,
96 pub lua_error: extern "C" fn(*mut LuaState) -> c_int,
97 pub lua_warning: unsafe extern "C" fn(*mut LuaState, *const c_char, c_int),
98
99 pub lua_checkstack: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
100 pub lua_absindex: extern "C" fn(*mut LuaState, c_int) -> c_int,
101 pub lua_copy: unsafe extern "C" fn(*mut LuaState, c_int, c_int),
102 pub lua_rotate: unsafe extern "C" fn(*mut LuaState, c_int, c_int),
103
104 pub lua_len: unsafe extern "C" fn(*mut LuaState, c_int),
105 pub lua_rawlen: unsafe extern "C" fn(*mut LuaState, c_int) -> c_ulonglong,
106 pub lua_compare: unsafe extern "C" fn(*mut LuaState, c_int, c_int, c_int) -> c_int,
107 pub lua_rawequal: unsafe extern "C" fn(*mut LuaState, c_int, c_int) -> c_int,
108
109 pub lua_arith: unsafe extern "C" fn(*mut LuaState, c_int),
110 pub lua_concat: unsafe extern "C" fn(*mut LuaState, c_int),
111
112 pub lua_load: unsafe extern "C" fn(
113 *mut LuaState,
114 LuaReader,
115 *mut c_void,
116 *const c_char,
117 *const c_char,
118 ) -> c_int,
119 pub lua_dump: unsafe extern "C" fn(*mut LuaState, LuaWriter, *mut c_void, c_int) -> c_int,
120
121 pub lua_toclose: unsafe extern "C" fn(*mut LuaState, c_int),
122 pub lua_closeslot: unsafe extern "C" fn(*mut LuaState, c_int),
123
124 pub lua_stringtonumber: unsafe extern "C" fn(*mut LuaState, *const c_char) -> usize,
125 pub lua_getallocf: unsafe extern "C" fn(*mut LuaState, *mut *mut c_void) -> LuaAlloc,
126 pub lua_gc: unsafe extern "C" fn(*mut LuaState, c_int, ...) -> c_int,
127 pub lua_version: unsafe extern "C" fn(*mut LuaState) -> c_double,
128
129 pub aux_checkany: unsafe extern "C" fn(*mut LuaState, c_int),
130 pub aux_checkinteger: unsafe extern "C" fn(*mut LuaState, c_int) -> c_longlong,
131 pub aux_checklstring: unsafe extern "C" fn(*mut LuaState, c_int, *mut usize) -> *const c_char,
132 pub aux_checknumber: unsafe extern "C" fn(*mut LuaState, c_int) -> c_double,
133 pub aux_checkoption:
134 unsafe extern "C" fn(*mut LuaState, c_int, *const c_char, *const *const c_char) -> c_int,
135 pub aux_checkudata: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> *mut u8,
136 pub aux_testudata: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> *mut c_void,
137 pub aux_checktype: unsafe extern "C" fn(*mut LuaState, c_int, c_int),
138 pub aux_typeerror: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
139 pub aux_argerror: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
140
141 pub aux_optinteger: unsafe extern "C" fn(*mut LuaState, c_int, c_longlong) -> c_longlong,
142 pub aux_optlstring:
143 unsafe extern "C" fn(*mut LuaState, c_int, *const c_char, *mut usize) -> *const c_char,
144 pub aux_optnumber: unsafe extern "C" fn(*mut LuaState, c_int, c_double) -> c_double,
145
146 pub aux_error: unsafe extern "C" fn(*mut LuaState, *const c_char, ...) -> c_int,
147 pub aux_checkstack: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char),
148 pub aux_tolstring: unsafe extern "C" fn(*mut LuaState, c_int, *mut usize) -> *const c_char,
149
150 pub aux_len: unsafe extern "C" fn(*mut LuaState, c_int) -> c_longlong,
151 pub aux_getsubtable: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
152 pub aux_ref: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
153 pub aux_unref: unsafe extern "C" fn(*mut LuaState, c_int, c_int),
154
155 pub aux_newmetatable: unsafe extern "C" fn(*mut LuaState, *const c_char) -> c_int,
156 pub aux_setmetatable: unsafe extern "C" fn(*mut LuaState, *const c_char),
157 pub aux_callmeta: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
158 pub aux_getmetafield: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
159
160 pub aux_loadstring: unsafe extern "C" fn(*mut LuaState, *const c_char) -> c_int,
161 pub aux_loadfilex: unsafe extern "C" fn(*mut LuaState, *const c_char, *const c_char) -> c_int,
162 pub aux_loadbufferx: unsafe extern "C" fn(
163 *mut LuaState,
164 *const c_char,
165 usize,
166 *const c_char,
167 *const c_char,
168 ) -> c_int,
169
170 pub aux_setfuncs: unsafe extern "C" fn(*mut LuaState, *const LuaReg, c_int),
171 pub aux_where: unsafe extern "C" fn(*mut LuaState, c_int),
172 pub aux_traceback: unsafe extern "C" fn(*mut LuaState, *mut LuaState, *const c_char, c_int),
173 pub aux_gsub: unsafe extern "C" fn(
174 *mut LuaState,
175 *const c_char,
176 *const c_char,
177 *const c_char,
178 ) -> *const c_char,
179 pub aux_execresult: unsafe extern "C" fn(*mut LuaState, c_int) -> c_int,
180 pub aux_fileresult: unsafe extern "C" fn(*mut LuaState, c_int, *const c_char) -> c_int,
181 pub module_configurations_path:
182 unsafe extern "C" fn(*const c_void, *const c_char, *mut c_char, u32) -> u32,
183}