rlua_lua54_sys/
lib.rs

1use std::mem;
2use std::os::raw::{c_char, c_int, c_void};
3use std::ptr;
4
5#[allow(non_upper_case_globals)]
6#[allow(non_camel_case_types)]
7#[allow(non_snake_case)]
8pub mod bindings;
9
10pub const LUA_OK: c_int = bindings::LUA_OK as c_int;
11pub const LUA_YIELD: c_int = bindings::LUA_YIELD as c_int;
12pub const LUA_ERRRUN: c_int = bindings::LUA_ERRRUN as c_int;
13pub const LUA_ERRSYNTAX: c_int = bindings::LUA_ERRSYNTAX as c_int;
14pub const LUA_ERRMEM: c_int = bindings::LUA_ERRMEM as c_int;
15pub const LUA_ERRERR: c_int = bindings::LUA_ERRERR as c_int;
16
17pub const LUA_NOREF: c_int = bindings::LUA_NOREF as c_int;
18pub const LUA_REFNIL: c_int = bindings::LUA_REFNIL as c_int;
19
20pub const LUA_MULTRET: c_int = bindings::LUA_MULTRET as c_int;
21pub const LUAI_MAXSTACK: c_int = bindings::LUAI_MAXSTACK as c_int;
22pub const LUA_REGISTRYINDEX: c_int = bindings::LUA_REGISTRYINDEX as c_int;
23pub const LUA_RIDX_MAINTHREAD: bindings::lua_Integer =
24    bindings::LUA_RIDX_MAINTHREAD as bindings::lua_Integer;
25pub const LUA_RIDX_GLOBALS: bindings::lua_Integer =
26    bindings::LUA_RIDX_GLOBALS as bindings::lua_Integer;
27pub const LUA_IDSIZE: c_int = bindings::LUA_IDSIZE as c_int;
28pub const LUA_MINSTACK: c_int = bindings::LUA_MINSTACK as c_int;
29// Not actually defined in lua.h / luaconf.h
30pub const LUA_MAX_UPVALUES: c_int = 255;
31
32pub const LUA_TNONE: c_int = bindings::LUA_TNONE as c_int;
33pub const LUA_TNIL: c_int = bindings::LUA_TNIL as c_int;
34pub const LUA_TBOOLEAN: c_int = bindings::LUA_TBOOLEAN as c_int;
35pub const LUA_TLIGHTUSERDATA: c_int = bindings::LUA_TLIGHTUSERDATA as c_int;
36pub const LUA_TNUMBER: c_int = bindings::LUA_TNUMBER as c_int;
37pub const LUA_TSTRING: c_int = bindings::LUA_TSTRING as c_int;
38pub const LUA_TTABLE: c_int = bindings::LUA_TTABLE as c_int;
39pub const LUA_TFUNCTION: c_int = bindings::LUA_TFUNCTION as c_int;
40pub const LUA_TUSERDATA: c_int = bindings::LUA_TUSERDATA as c_int;
41pub const LUA_TTHREAD: c_int = bindings::LUA_TTHREAD as c_int;
42
43pub const LUA_GCSTOP: c_int = bindings::LUA_GCSTOP as c_int;
44pub const LUA_GCRESTART: c_int = bindings::LUA_GCRESTART as c_int;
45pub const LUA_GCCOLLECT: c_int = bindings::LUA_GCCOLLECT as c_int;
46pub const LUA_GCCOUNT: c_int = bindings::LUA_GCCOUNT as c_int;
47pub const LUA_GCCOUNTB: c_int = bindings::LUA_GCCOUNTB as c_int;
48pub const LUA_GCSTEP: c_int = bindings::LUA_GCSTEP as c_int;
49#[deprecated(note = "please use `LUA_GCINC` instead")]
50pub const LUA_GCSETPAUSE: c_int = bindings::LUA_GCSETPAUSE as c_int;
51#[deprecated(note = "please use `LUA_GCINC` instead")]
52pub const LUA_GCSETSTEPMUL: c_int = bindings::LUA_GCSETSTEPMUL as c_int;
53pub const LUA_GCISRUNNING: c_int = bindings::LUA_GCISRUNNING as c_int;
54pub const LUA_GCGEN: c_int = bindings::LUA_GCGEN as c_int;
55pub const LUA_GCINC: c_int = bindings::LUA_GCINC as c_int;
56
57pub const LUA_MASKCALL: c_int = bindings::LUA_MASKCALL as c_int;
58pub const LUA_MASKRET: c_int = bindings::LUA_MASKRET as c_int;
59pub const LUA_MASKLINE: c_int = bindings::LUA_MASKLINE as c_int;
60pub const LUA_MASKCOUNT: c_int = bindings::LUA_MASKCOUNT as c_int;
61
62pub use {
63    bindings::LUA_AUTHORS, bindings::LUA_COPYRIGHT, bindings::LUA_VERSION,
64    bindings::LUA_VERSION_MAJOR, bindings::LUA_VERSION_MINOR, bindings::LUA_VERSION_NUM,
65    bindings::LUA_VERSION_RELEASE, bindings::LUA_VERSION_RELEASE_NUM,
66};
67
68pub use {
69    bindings::lua_compare, bindings::lua_getinfo, bindings::lua_getlocal, bindings::lua_getupvalue,
70    bindings::lua_rawequal, bindings::lua_sethook, bindings::lua_setlocal,
71    bindings::lua_setupvalue,
72};
73
74pub use {
75    bindings::lua_Alloc, bindings::lua_CFunction, bindings::lua_Debug, bindings::lua_Integer,
76    bindings::lua_KContext, bindings::lua_Number, bindings::lua_State, bindings::lua_Unsigned,
77    bindings::lua_setcstacklimit,
78};
79
80/*
81** state manipulation
82*/
83pub use {
84    bindings::lua_atpanic, bindings::lua_close, bindings::lua_newstate, bindings::lua_newthread,
85    bindings::lua_resetthread, bindings::lua_version,
86};
87
88/*
89** basic stack manipulation
90*/
91pub use {
92    bindings::lua_absindex, bindings::lua_checkstack, bindings::lua_copy, bindings::lua_gettop,
93    bindings::lua_pushvalue, bindings::lua_rotate, bindings::lua_settop, bindings::lua_xmove,
94};
95
96/*
97** access functions (stack -> C)
98*/
99pub use {
100    bindings::lua_iscfunction, bindings::lua_isinteger, bindings::lua_isnumber,
101    bindings::lua_isstring, bindings::lua_isuserdata, bindings::lua_rawlen,
102    bindings::lua_toboolean, bindings::lua_tocfunction, bindings::lua_tointegerx,
103    bindings::lua_tolstring, bindings::lua_tonumberx, bindings::lua_topointer,
104    bindings::lua_tothread, bindings::lua_touserdata, bindings::lua_type, bindings::lua_typename,
105};
106
107/*
108** push functions (C -> stack)
109*/
110pub use {
111    bindings::lua_pushboolean, bindings::lua_pushcclosure, bindings::lua_pushfstring,
112    bindings::lua_pushinteger, bindings::lua_pushlightuserdata, bindings::lua_pushlstring,
113    bindings::lua_pushnil, bindings::lua_pushnumber, bindings::lua_pushstring,
114    bindings::lua_pushthread, bindings::lua_pushvfstring,
115};
116
117/*
118** get functions (Lua -> stack)
119*/
120pub use {
121    bindings::lua_createtable, bindings::lua_getfield, bindings::lua_getglobal, bindings::lua_geti,
122    bindings::lua_getiuservalue, bindings::lua_getmetatable, bindings::lua_gettable,
123    bindings::lua_newuserdatauv, bindings::lua_rawget, bindings::lua_rawgeti,
124    bindings::lua_rawgetp,
125};
126
127/*
128** set functions (stack -> Lua)
129*/
130pub use {
131    bindings::lua_rawset, bindings::lua_rawseti, bindings::lua_rawsetp, bindings::lua_setfield,
132    bindings::lua_setglobal, bindings::lua_seti, bindings::lua_setiuservalue,
133    bindings::lua_setmetatable, bindings::lua_settable,
134};
135
136/*
137** 'load' and 'call' functions (load and run Lua code)
138*/
139
140pub use {bindings::lua_callk, bindings::lua_dump, bindings::lua_load, bindings::lua_pcallk};
141/*
142** coroutine functions
143*/
144pub use {
145    bindings::lua_isyieldable, bindings::lua_resume, bindings::lua_status, bindings::lua_yieldk,
146};
147
148/*
149** Warning-related functions
150*/
151pub use {bindings::lua_setwarnf, bindings::lua_warning};
152
153/*
154** garbage-collection function and options
155*/
156pub use bindings::lua_gc;
157
158/*
159** miscellaneous functions
160*/
161pub use {
162    bindings::lua_concat, bindings::lua_error, bindings::lua_getallocf, bindings::lua_len,
163    bindings::lua_next, bindings::lua_setallocf, bindings::lua_stringtonumber,
164    bindings::lua_toclose,
165};
166
167/*
168** lauxlib.h
169*/
170pub use {
171    bindings::luaL_Buffer, bindings::luaL_Reg, bindings::luaL_Stream, bindings::luaL_addgsub,
172    bindings::luaL_addlstring, bindings::luaL_addstring, bindings::luaL_addvalue,
173    bindings::luaL_argerror, bindings::luaL_buffinit, bindings::luaL_buffinitsize,
174    bindings::luaL_callmeta, bindings::luaL_checkany, bindings::luaL_checkinteger,
175    bindings::luaL_checklstring, bindings::luaL_checknumber, bindings::luaL_checkoption,
176    bindings::luaL_checkstack, bindings::luaL_checktype, bindings::luaL_checkudata,
177    bindings::luaL_error, bindings::luaL_execresult, bindings::luaL_getmetafield,
178    bindings::luaL_getsubtable, bindings::luaL_gsub, bindings::luaL_len,
179    bindings::luaL_loadbufferx, bindings::luaL_loadfilex, bindings::luaL_loadstring,
180    bindings::luaL_newmetatable, bindings::luaL_newstate, bindings::luaL_optinteger,
181    bindings::luaL_optlstring, bindings::luaL_optnumber, bindings::luaL_prepbuffsize,
182    bindings::luaL_pushresult, bindings::luaL_pushresultsize, bindings::luaL_ref,
183    bindings::luaL_requiref, bindings::luaL_setfuncs, bindings::luaL_setmetatable,
184    bindings::luaL_testudata, bindings::luaL_tolstring, bindings::luaL_traceback,
185    bindings::luaL_typeerror, bindings::luaL_unref, bindings::luaL_where,
186};
187
188/*
189** lualib.h
190*/
191pub use {
192    bindings::luaopen_base, bindings::luaopen_coroutine, bindings::luaopen_debug,
193    bindings::luaopen_io, bindings::luaopen_math, bindings::luaopen_os, bindings::luaopen_package,
194    bindings::luaopen_string, bindings::luaopen_table, bindings::luaopen_utf8,
195};
196
197// The following are re-implementations of what are macros in the Lua C API
198pub unsafe fn lua_getextraspace(state: *mut lua_State) -> *mut c_void {
199    (state as *mut c_void).offset(-(mem::size_of::<*mut c_void>() as isize))
200}
201
202pub unsafe fn lua_pcall(
203    state: *mut lua_State,
204    nargs: c_int,
205    nresults: c_int,
206    msgh: c_int,
207) -> c_int {
208    lua_pcallk(state, nargs, nresults, msgh, 0, None)
209}
210
211pub unsafe fn lua_newuserdata(state: *mut lua_State, s: usize) -> *mut ::std::os::raw::c_void {
212    lua_newuserdatauv(state, s, 1)
213}
214
215pub unsafe fn lua_getuservalue(state: *mut lua_State, idx: c_int) -> c_int {
216    lua_getiuservalue(state, idx, 1)
217}
218
219pub unsafe fn lua_setuservalue(state: *mut lua_State, idx: c_int) -> c_int {
220    lua_setiuservalue(state, idx, 1)
221}
222
223pub unsafe fn lua_tonumber(state: *mut lua_State, idx: c_int) -> lua_Number {
224    return lua_tonumberx(state, idx, ptr::null_mut());
225}
226pub unsafe fn lua_tointeger(state: *mut lua_State, idx: c_int) -> lua_Number {
227    return lua_tonumberx(state, idx, ptr::null_mut());
228}
229pub unsafe fn lua_pop(state: *mut lua_State, n: c_int) {
230    lua_settop(state, -(n) - 1);
231}
232pub unsafe fn lua_isfunction(state: *mut lua_State, n: c_int) -> bool {
233    return lua_type(state, n) == LUA_TFUNCTION as i32;
234}
235pub unsafe fn lua_istable(state: *mut lua_State, n: c_int) -> bool {
236    return lua_type(state, n) == LUA_TTABLE as i32;
237}
238pub unsafe fn lua_islightuserdata(state: *mut lua_State, n: c_int) -> bool {
239    return lua_type(state, n) == LUA_TLIGHTUSERDATA as i32;
240}
241pub unsafe fn lua_isnil(state: *mut lua_State, n: c_int) -> bool {
242    return lua_type(state, n) == LUA_TNIL as i32;
243}
244pub unsafe fn lua_isboolean(state: *mut lua_State, n: c_int) -> bool {
245    return lua_type(state, n) == LUA_TBOOLEAN as i32;
246}
247pub unsafe fn lua_isthread(state: *mut lua_State, n: c_int) -> bool {
248    return lua_type(state, n) == LUA_TTHREAD as i32;
249}
250pub unsafe fn lua_isnone(state: *mut lua_State, n: c_int) -> bool {
251    return lua_type(state, n) == LUA_TNONE as i32;
252}
253pub unsafe fn lua_isnoneornil(state: *mut lua_State, n: c_int) -> bool {
254    return lua_type(state, n) == LUA_TNONE as i32;
255}
256
257pub unsafe fn lua_pushliteral(state: *mut lua_State, str: *const c_char) -> *const c_char {
258    return lua_pushstring(state, str);
259}
260
261pub unsafe fn lua_pushglobaltable(state: *mut lua_State) {
262    lua_rawgeti(state, LUA_REGISTRYINDEX as i32, LUA_RIDX_GLOBALS as i64);
263}
264
265pub unsafe fn lua_newtable(state: *mut lua_State) {
266    lua_createtable(state, 0, 0);
267}
268
269pub unsafe fn lua_register(state: *mut lua_State, n: *const c_char, f: lua_CFunction) {
270    lua_pushcfunction(state, f);
271    lua_setglobal(state, n);
272}
273
274pub unsafe fn lua_pushcfunction(state: *mut lua_State, f: lua_CFunction) {
275    lua_pushcclosure(state, f, 0);
276}
277
278pub unsafe fn lua_tostring(state: *mut lua_State, i: c_int) -> *const c_char {
279    return lua_tolstring(state, i, ptr::null_mut());
280}
281
282pub unsafe fn lua_insert(state: *mut lua_State, idx: c_int) {
283    lua_rotate(state, idx, 1);
284}
285
286pub unsafe fn lua_remove(state: *mut lua_State, idx: c_int) {
287    lua_rotate(state, idx, -1);
288    lua_pop(state, 1);
289}
290
291pub unsafe fn lua_replace(state: *mut lua_State, idx: c_int) {
292    lua_copy(state, -1, idx);
293    lua_pop(state, 1);
294}
295
296pub unsafe fn lua_upvalueindex(index: c_int) -> i32 {
297    return LUA_REGISTRYINDEX - index;
298}
299
300pub unsafe fn lua_call(state: *mut lua_State, nargs: c_int, nresults: c_int) {
301    lua_callk(state, nargs, nresults, 0, None)
302}