rlua_lua51_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_REGISTRYINDEX: c_int = bindings::LUA_REGISTRYINDEX as c_int;
11pub const LUA_ENVIRONINDEX: c_int = bindings::LUA_ENVIRONINDEX as c_int;
12pub const LUA_GLOBALSINDEX: c_int = bindings::LUA_GLOBALSINDEX as c_int;
13
14pub const LUA_OK: c_int = 0;
15pub const LUA_YIELD: c_int = bindings::LUA_YIELD as c_int;
16pub const LUA_ERRRUN: c_int = bindings::LUA_ERRRUN as c_int;
17pub const LUA_ERRSYNTAX: c_int = bindings::LUA_ERRSYNTAX as c_int;
18pub const LUA_ERRMEM: c_int = bindings::LUA_ERRMEM as c_int;
19pub const LUA_ERRERR: c_int = bindings::LUA_ERRERR as c_int;
20
21pub const LUA_NOREF: c_int = bindings::LUA_NOREF as c_int;
22pub const LUA_REFNIL: c_int = bindings::LUA_REFNIL as c_int;
23
24pub const LUA_MULTRET: c_int = bindings::LUA_MULTRET as c_int;
25pub const LUA_IDSIZE: c_int = bindings::LUA_IDSIZE as c_int;
26pub const LUA_MINSTACK: c_int = bindings::LUA_MINSTACK as c_int;
27// Not actually defined in lua.h / luaconf.h
28pub const LUA_MAX_UPVALUES: c_int = 255;
29
30pub const LUA_TNONE: c_int = bindings::LUA_TNONE as c_int;
31pub const LUA_TNIL: c_int = bindings::LUA_TNIL as c_int;
32pub const LUA_TBOOLEAN: c_int = bindings::LUA_TBOOLEAN as c_int;
33pub const LUA_TLIGHTUSERDATA: c_int = bindings::LUA_TLIGHTUSERDATA as c_int;
34pub const LUA_TNUMBER: c_int = bindings::LUA_TNUMBER as c_int;
35pub const LUA_TSTRING: c_int = bindings::LUA_TSTRING as c_int;
36pub const LUA_TTABLE: c_int = bindings::LUA_TTABLE as c_int;
37pub const LUA_TFUNCTION: c_int = bindings::LUA_TFUNCTION as c_int;
38pub const LUA_TUSERDATA: c_int = bindings::LUA_TUSERDATA as c_int;
39pub const LUA_TTHREAD: c_int = bindings::LUA_TTHREAD as c_int;
40
41pub const LUA_GCSTOP: c_int = bindings::LUA_GCSTOP as c_int;
42pub const LUA_GCRESTART: c_int = bindings::LUA_GCRESTART as c_int;
43pub const LUA_GCCOLLECT: c_int = bindings::LUA_GCCOLLECT as c_int;
44pub const LUA_GCCOUNT: c_int = bindings::LUA_GCCOUNT as c_int;
45pub const LUA_GCCOUNTB: c_int = bindings::LUA_GCCOUNTB as c_int;
46pub const LUA_GCSTEP: c_int = bindings::LUA_GCSTEP as c_int;
47#[deprecated(note = "please use `LUA_GCINC` instead")]
48pub const LUA_GCSETPAUSE: c_int = bindings::LUA_GCSETPAUSE as c_int;
49#[deprecated(note = "please use `LUA_GCINC` instead")]
50pub const LUA_GCSETSTEPMUL: c_int = bindings::LUA_GCSETSTEPMUL as c_int;
51
52pub const LUA_MASKCALL: c_int = bindings::LUA_MASKCALL as c_int;
53pub const LUA_MASKRET: c_int = bindings::LUA_MASKRET as c_int;
54pub const LUA_MASKLINE: c_int = bindings::LUA_MASKLINE as c_int;
55pub const LUA_MASKCOUNT: c_int = bindings::LUA_MASKCOUNT as c_int;
56
57pub use {
58    bindings::LUA_AUTHORS, bindings::LUA_COPYRIGHT, bindings::LUA_VERSION,
59    bindings::LUA_VERSION_NUM,
60};
61
62pub use {
63    bindings::lua_getinfo, bindings::lua_getlocal, bindings::lua_getupvalue, bindings::lua_sethook,
64    bindings::lua_setlocal, bindings::lua_setupvalue,
65};
66
67pub use {
68    bindings::lua_Alloc, bindings::lua_CFunction, bindings::lua_Debug, bindings::lua_Integer,
69    bindings::lua_Number, bindings::lua_State, bindings::lua_Writer,
70};
71
72/*
73** state manipulation
74*/
75pub use {
76    bindings::lua_atpanic, bindings::lua_close, bindings::lua_newstate, bindings::lua_newthread,
77};
78
79/*
80** basic stack manipulation
81*/
82pub use {
83    bindings::lua_checkstack, bindings::lua_gettop, bindings::lua_insert, bindings::lua_pushvalue,
84    bindings::lua_remove, bindings::lua_replace, bindings::lua_settop, bindings::lua_xmove,
85};
86
87/*
88** access functions (stack -> C)
89*/
90pub use {
91    bindings::lua_equal, bindings::lua_iscfunction, bindings::lua_isnumber, bindings::lua_isstring,
92    bindings::lua_isuserdata, bindings::lua_lessthan, bindings::lua_objlen, bindings::lua_rawequal,
93    bindings::lua_toboolean, bindings::lua_tocfunction, bindings::lua_tointeger,
94    bindings::lua_tolstring, bindings::lua_tonumber, bindings::lua_topointer,
95    bindings::lua_tothread, bindings::lua_touserdata, bindings::lua_type, bindings::lua_typename,
96};
97
98/*
99** push functions (C -> stack)
100*/
101pub use {
102    bindings::lua_pushboolean, bindings::lua_pushcclosure, bindings::lua_pushfstring,
103    bindings::lua_pushinteger, bindings::lua_pushlightuserdata, bindings::lua_pushlstring,
104    bindings::lua_pushnil, bindings::lua_pushnumber, bindings::lua_pushstring,
105    bindings::lua_pushthread, bindings::lua_pushvfstring,
106};
107
108/*
109** get functions (Lua -> stack)
110*/
111pub use {
112    bindings::lua_createtable, bindings::lua_getfenv, bindings::lua_getfield,
113    bindings::lua_getmetatable, bindings::lua_gettable, bindings::lua_newuserdata,
114    bindings::lua_rawget, bindings::lua_rawgeti,
115};
116
117/*
118** set functions (stack -> Lua)
119*/
120pub use {
121    bindings::lua_rawset, bindings::lua_rawseti, bindings::lua_setfenv, bindings::lua_setfield,
122    bindings::lua_setmetatable, bindings::lua_settable,
123};
124
125/*
126** `load' and `call' functions (load and run Lua code)
127*/
128pub use {bindings::lua_call, bindings::lua_cpcall, bindings::lua_load, bindings::lua_pcall};
129
130/*
131** coroutine functions
132*/
133pub use {bindings::lua_resume, bindings::lua_status};
134
135/*
136** garbage-collection function and options
137*/
138pub use bindings::lua_gc;
139
140/*
141** miscellaneous functions
142*/
143pub use {
144    bindings::lua_concat, bindings::lua_dump, bindings::lua_error, bindings::lua_getallocf,
145    bindings::lua_next, bindings::lua_setallocf,
146};
147
148/*
149** lauxlib.h
150*/
151pub use {
152    bindings::luaL_addlstring, bindings::luaL_addstring, bindings::luaL_addvalue,
153    bindings::luaL_argerror, bindings::luaL_buffinit, bindings::luaL_callmeta,
154    bindings::luaL_checkany, bindings::luaL_checkinteger, bindings::luaL_checklstring,
155    bindings::luaL_checknumber, bindings::luaL_checkoption, bindings::luaL_checkstack,
156    bindings::luaL_checktype, bindings::luaL_checkudata, bindings::luaL_error,
157    bindings::luaL_findtable, bindings::luaL_getmetafield, bindings::luaL_gsub,
158    bindings::luaL_loadbuffer, bindings::luaL_loadfile, bindings::luaL_loadstring,
159    bindings::luaL_newmetatable, bindings::luaL_newstate, bindings::luaL_optinteger,
160    bindings::luaL_optlstring, bindings::luaL_optnumber, bindings::luaL_prepbuffer,
161    bindings::luaL_pushresult, bindings::luaL_ref, bindings::luaL_register,
162    bindings::luaL_typerror, bindings::luaL_unref, bindings::luaL_where,
163};
164
165/*
166** lualib.h
167*/
168pub use {
169    bindings::luaopen_base, bindings::luaopen_debug, bindings::luaopen_io, bindings::luaopen_math,
170    bindings::luaopen_os, bindings::luaopen_package, bindings::luaopen_string,
171    bindings::luaopen_table,
172};
173
174// The following are re-implementations of what are macros in the Lua C API
175pub unsafe fn lua_getextraspace(state: *mut lua_State) -> *mut c_void {
176    (state as *mut c_void).offset(-(mem::size_of::<*mut c_void>() as isize))
177}
178
179pub unsafe fn lua_pop(state: *mut lua_State, n: c_int) {
180    lua_settop(state, -(n) - 1);
181}
182pub unsafe fn lua_isfunction(state: *mut lua_State, n: c_int) -> bool {
183    return lua_type(state, n) == LUA_TFUNCTION as i32;
184}
185pub unsafe fn lua_istable(state: *mut lua_State, n: c_int) -> bool {
186    return lua_type(state, n) == LUA_TTABLE as i32;
187}
188pub unsafe fn lua_islightuserdata(state: *mut lua_State, n: c_int) -> bool {
189    return lua_type(state, n) == LUA_TLIGHTUSERDATA as i32;
190}
191pub unsafe fn lua_isnil(state: *mut lua_State, n: c_int) -> bool {
192    return lua_type(state, n) == LUA_TNIL as i32;
193}
194pub unsafe fn lua_isboolean(state: *mut lua_State, n: c_int) -> bool {
195    return lua_type(state, n) == LUA_TBOOLEAN as i32;
196}
197pub unsafe fn lua_isthread(state: *mut lua_State, n: c_int) -> bool {
198    return lua_type(state, n) == LUA_TTHREAD as i32;
199}
200pub unsafe fn lua_isnone(state: *mut lua_State, n: c_int) -> bool {
201    return lua_type(state, n) == LUA_TNONE as i32;
202}
203pub unsafe fn lua_isnoneornil(state: *mut lua_State, n: c_int) -> bool {
204    return lua_type(state, n) == LUA_TNONE as i32;
205}
206
207pub unsafe fn lua_newtable(state: *mut lua_State) {
208    lua_createtable(state, 0, 0);
209}
210
211pub unsafe fn lua_pushcfunction(state: *mut lua_State, f: lua_CFunction) {
212    lua_pushcclosure(state, f, 0);
213}
214
215pub unsafe fn lua_tostring(state: *mut lua_State, i: c_int) -> *const c_char {
216    return lua_tolstring(state, i, ptr::null_mut());
217}
218pub unsafe fn lua_upvalueindex(index: c_int) -> i32 {
219    return LUA_GLOBALSINDEX - index;
220}
221
222pub unsafe fn lua_register(
223    state: *mut lua_State,
224    n: *const ::std::os::raw::c_char,
225    f: lua_CFunction,
226) {
227    lua_pushcfunction(state, f);
228    lua_setglobal(state, n);
229}
230
231pub unsafe fn lua_setglobal(state: *mut lua_State, k: *const ::std::os::raw::c_char) {
232    lua_setfield(state, LUA_GLOBALSINDEX, k);
233}
234pub unsafe fn lua_getglobal(state: *mut lua_State, k: *const ::std::os::raw::c_char) {
235    lua_getfield(state, LUA_GLOBALSINDEX, k);
236}