summaryrefslogtreecommitdiff
path: root/src/ffi.rs
diff options
context:
space:
mode:
authorkyren <kerriganw@gmail.com>2017-05-21 19:50:59 -0400
committerkyren <kerriganw@gmail.com>2017-05-21 19:50:59 -0400
commit065c69894a08dc52e7a1baba9154681d6c0fa834 (patch)
tree76bcf03a8aa291f465dfb5f216389a21baaa5d1a /src/ffi.rs
downloadmlua-065c69894a08dc52e7a1baba9154681d6c0fa834.zip
Initial import
Diffstat (limited to 'src/ffi.rs')
-rw-r--r--src/ffi.rs241
1 files changed, 241 insertions, 0 deletions
diff --git a/src/ffi.rs b/src/ffi.rs
new file mode 100644
index 0000000..314fe5e
--- /dev/null
+++ b/src/ffi.rs
@@ -0,0 +1,241 @@
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+use std::ptr;
+use std::os::raw::*;
+
+pub type lua_Integer = c_longlong;
+pub type lua_Number = c_double;
+
+pub enum lua_State {}
+pub type lua_Alloc = extern "C" fn(ud: *mut c_void,
+ ptr: *mut c_void,
+ osize: usize,
+ nsize: usize)
+ -> *mut c_void;
+pub type lua_KContext = *mut c_void;
+pub type lua_KFunction = unsafe extern "C" fn(state: *mut lua_State,
+ status: c_int,
+ ctx: lua_KContext)
+ -> c_int;
+pub type lua_CFunction = unsafe extern "C" fn(state: *mut lua_State) -> c_int;
+
+pub const LUA_OK: c_int = 0;
+pub const LUA_ERRRUN: c_int = 2;
+pub const LUA_ERRSYNTAX: c_int = 3;
+pub const LUA_ERRMEM: c_int = 4;
+pub const LUA_ERRGCMM: c_int = 5;
+pub const LUA_ERRERR: c_int = 6;
+
+pub const LUA_MULTRET: c_int = -1;
+pub const LUAI_MAXSTACK: c_int = 1000000;
+pub const LUA_REGISTRYINDEX: c_int = -LUAI_MAXSTACK - 1000;
+pub const LUA_RIDX_MAINTHREAD: lua_Integer = 1;
+pub const LUA_RIDX_GLOBALS: lua_Integer = 2;
+
+pub const LUA_TNONE: c_int = -1;
+pub const LUA_TNIL: c_int = 0;
+pub const LUA_TBOOLEAN: c_int = 1;
+pub const LUA_TLIGHTUSERDATA: c_int = 2;
+pub const LUA_TNUMBER: c_int = 3;
+pub const LUA_TSTRING: c_int = 4;
+pub const LUA_TTABLE: c_int = 5;
+pub const LUA_TFUNCTION: c_int = 6;
+pub const LUA_TUSERDATA: c_int = 7;
+pub const LUA_TTHREAD: c_int = 8;
+
+extern "C" {
+ pub fn lua_close(state: *mut lua_State);
+ pub fn lua_callk(state: *mut lua_State,
+ nargs: c_int,
+ nresults: c_int,
+ ctx: lua_KContext,
+ k: Option<lua_KFunction>);
+ pub fn lua_pcallk(state: *mut lua_State,
+ nargs: c_int,
+ nresults: c_int,
+ msgh: c_int,
+ ctx: lua_KContext,
+ k: Option<lua_KFunction>)
+ -> c_int;
+
+ pub fn lua_pushnil(state: *mut lua_State);
+ pub fn lua_pushvalue(state: *mut lua_State, index: c_int);
+ pub fn lua_pushboolean(state: *mut lua_State, b: c_int);
+ pub fn lua_pushinteger(state: *mut lua_State, n: lua_Integer);
+ pub fn lua_pushnumber(state: *mut lua_State, n: lua_Number);
+ pub fn lua_pushlstring(state: *mut lua_State, s: *const c_char, len: usize) -> *const c_char;
+ pub fn lua_pushlightuserdata(state: *mut lua_State, data: *mut c_void);
+ pub fn lua_pushcclosure(state: *mut lua_State, function: lua_CFunction, n: c_int);
+
+ pub fn lua_tointegerx(state: *mut lua_State, index: c_int, isnum: *mut c_int) -> lua_Integer;
+ pub fn lua_tolstring(state: *mut lua_State, index: c_int, len: *mut usize) -> *const c_char;
+ pub fn lua_toboolean(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_tonumberx(state: *mut lua_State, index: c_int, isnum: *mut c_int) -> lua_Number;
+ pub fn lua_touserdata(state: *mut lua_State, index: c_int) -> *mut c_void;
+
+ pub fn lua_gettop(state: *const lua_State) -> c_int;
+ pub fn lua_settop(state: *mut lua_State, n: c_int);
+ pub fn lua_checkstack(state: *mut lua_State, n: c_int) -> c_int;
+ pub fn lua_rotate(state: *mut lua_State, index: c_int, n: c_int);
+ pub fn lua_copy(state: *mut lua_State, from: c_int, to: c_int);
+ pub fn lua_absindex(state: *mut lua_State, index: c_int) -> c_int;
+
+ pub fn lua_isinteger(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_isnumber(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_isstring(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_iscfunction(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_isuserdata(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_type(state: *mut lua_State, index: c_int) -> c_int;
+
+ pub fn lua_gettable(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_rawget(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_rawgeti(state: *mut lua_State, index: c_int, n: lua_Integer) -> c_int;
+ pub fn lua_getmetatable(state: *mut lua_State, index: c_int) -> c_int;
+
+ pub fn lua_createtable(state: *mut lua_State, narr: c_int, nrec: c_int);
+ pub fn lua_newuserdata(state: *mut lua_State, size: usize) -> *mut c_void;
+
+ pub fn lua_settable(state: *mut lua_State, index: c_int);
+ pub fn lua_setmetatable(state: *mut lua_State, index: c_int);
+
+ pub fn lua_len(state: *mut lua_State, index: c_int);
+ pub fn lua_next(state: *mut lua_State, index: c_int) -> c_int;
+ pub fn lua_rawequal(state: *mut lua_State, index1: c_int, index2: c_int) -> c_int;
+
+ pub fn lua_error(state: *mut lua_State) -> !;
+
+ pub fn luaL_newstate() -> *mut lua_State;
+ pub fn luaL_openlibs(state: *mut lua_State);
+ pub fn luaL_loadbufferx(state: *mut lua_State,
+ buf: *const c_char,
+ size: usize,
+ name: *const c_char,
+ mode: *const c_char)
+ -> c_int;
+ pub fn luaL_ref(state: *mut lua_State, table: c_int) -> c_int;
+ pub fn luaL_unref(state: *mut lua_State, table: c_int, lref: c_int);
+ pub fn luaL_checkstack(state: *mut lua_State, size: c_int, msg: *const c_char);
+ pub fn luaL_traceback(state: *mut lua_State,
+ push_state: *mut lua_State,
+ msg: *const c_char,
+ level: c_int);
+}
+
+pub unsafe fn lua_pop(state: *mut lua_State, n: c_int) {
+ lua_settop(state, -n - 1);
+}
+
+pub unsafe fn lua_newtable(state: *mut lua_State) {
+ lua_createtable(state, 0, 0);
+}
+
+pub fn lua_upvalueindex(i: c_int) -> c_int {
+ LUA_REGISTRYINDEX - i
+}
+
+pub unsafe fn lua_pushcfunction(state: *mut lua_State, function: lua_CFunction) {
+ lua_pushcclosure(state, function, 0);
+}
+
+pub unsafe fn lua_tonumber(state: *mut lua_State, index: c_int) -> lua_Number {
+ lua_tonumberx(state, index, ptr::null_mut())
+}
+
+pub unsafe fn lua_tointeger(state: *mut lua_State, index: c_int) -> lua_Integer {
+ lua_tointegerx(state, index, ptr::null_mut())
+}
+
+pub unsafe fn lua_tostring(state: *mut lua_State, index: c_int) -> *const c_char {
+ lua_tolstring(state, index, ptr::null_mut())
+}
+
+pub unsafe fn lua_isfunction(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TFUNCTION {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_istable(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TTABLE {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_islightuserdata(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TLIGHTUSERDATA {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_isnil(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TNIL {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_isboolean(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TBOOLEAN {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_isthread(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TTHREAD {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_isnone(state: *mut lua_State, index: c_int) -> c_int {
+ if lua_type(state, index) == LUA_TNONE {
+ 1
+ } else {
+ 0
+ }
+}
+
+pub unsafe fn lua_insert(state: *mut lua_State, index: c_int) {
+ lua_rotate(state, index, 1);
+}
+
+pub unsafe fn lua_remove(state: *mut lua_State, index: c_int) {
+ lua_rotate(state, index, -1);
+ lua_pop(state, 1);
+}
+
+pub unsafe fn lua_call(state: *mut lua_State, nargs: c_int, nresults: c_int) {
+ lua_callk(state, nargs, nresults, ptr::null_mut(), None)
+}
+
+pub unsafe fn lua_pcall(state: *mut lua_State,
+ nargs: c_int,
+ nresults: c_int,
+ msgh: c_int)
+ -> c_int {
+ lua_pcallk(state, nargs, nresults, msgh, ptr::null_mut(), None)
+}
+
+pub unsafe fn lua_replace(state: *mut lua_State, index: c_int) {
+ lua_copy(state, -1, index);
+ lua_pop(state, 1);
+}
+
+pub unsafe fn luaL_loadbuffer(state: *mut lua_State,
+ buf: *const c_char,
+ size: usize,
+ name: *const c_char)
+ -> c_int {
+ luaL_loadbufferx(state, buf, size, name, ptr::null())
+}