#[link(name = "lua", vers = "0.0.1", author = "doy")]; #[crate_type = "lib"]; use ptr::null; use libc::{c_char,c_int}; pub struct State { priv state: *lua_State, } impl State { fn close(self) { close(self) } fn openlibs(self) { openlibs(self) } fn loadstring(self, string: &str) -> Status { loadstring(self, string) } fn call(self, nargs: int, nresults: int) { call(self, nargs, nresults) } } pub enum Status { OK = 0, YIELD = 1, ERRRUN = 2, ERRSYNTAX = 3, ERRMEM = 4, ERRGCMM = 5, ERRERR = 6, } pub fn newstate() -> State { State { state: lua::luaL_newstate() } } pub fn close(state: State) { lua::lua_close(state.state) } pub fn openlibs(state: State) { lua::luaL_openlibs(state.state) } pub fn loadstring(state: State, string: &str) -> Status { let status = do str::as_c_str(string) |c_string| { lua::luaL_loadstring(state.state, c_string) }; match status { 0 => OK, 3 => ERRSYNTAX, 4 => ERRMEM, 5 => ERRGCMM, _ => fail ~"Unexpected status in loadstring", } } pub fn call(state: State, nargs: int, nresults: int) { lua::lua_callk( state.state, nargs as c_int, nresults as c_int, 0 as c_int, null() ) } enum lua_State {} enum lua_CFunction {} extern mod lua { fn luaL_newstate() -> *lua_State; fn lua_close(state: *lua_State); fn luaL_openlibs(state: *lua_State); fn luaL_loadstring(state: *lua_State, string: *c_char) -> c_int; fn lua_callk( state: *lua_State, nargs: c_int, nresults: c_int, ctx: c_int, k: *lua_CFunction ); }