diff options
author | kyren <kerriganw@gmail.com> | 2017-05-21 19:50:59 -0400 |
---|---|---|
committer | kyren <kerriganw@gmail.com> | 2017-05-21 19:50:59 -0400 |
commit | 065c69894a08dc52e7a1baba9154681d6c0fa834 (patch) | |
tree | 76bcf03a8aa291f465dfb5f216389a21baaa5d1a /src/ffi.rs | |
download | mlua-065c69894a08dc52e7a1baba9154681d6c0fa834.zip |
Initial import
Diffstat (limited to 'src/ffi.rs')
-rw-r--r-- | src/ffi.rs | 241 |
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()) +} |