From 357d902b87d0b0e74f3db400f77db985f8add19f Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 8 Apr 2015 14:29:58 +0100 Subject: [PATCH] elua lib: add elua_state_from_lua_get --- src/lib/elua/Elua.h | 2 ++ src/lib/elua/elua.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/lib/elua/Elua.h b/src/lib/elua/Elua.h index 69c72b05b9..2f1f41af68 100644 --- a/src/lib/elua/Elua.h +++ b/src/lib/elua/Elua.h @@ -69,6 +69,8 @@ EAPI int elua_shutdown(void); EAPI Elua_State *elua_state_new(void); EAPI void elua_state_free(Elua_State *state); +EAPI Elua_State *elua_state_from_lua_get(lua_State *L); + EAPI int elua_report_error(lua_State *L, const char *pname, int status); EAPI void elua_state_setup_i18n(lua_State *L); diff --git a/src/lib/elua/elua.c b/src/lib/elua/elua.c index a6bb3914cd..bdd5606fed 100644 --- a/src/lib/elua/elua.c +++ b/src/lib/elua/elua.c @@ -72,6 +72,8 @@ elua_state_new(void) ret = malloc(sizeof(Elua_State)); ret->luastate = L; luaL_openlibs(L); + lua_pushlightuserdata(L, ret); + lua_setfield(L, LUA_REGISTRYINDEX, "elua_ptr"); return ret; } @@ -83,6 +85,20 @@ elua_state_free(Elua_State *state) free(state); } +EAPI Elua_State * +elua_state_from_lua_get(lua_State *L) +{ + lua_getfield(L, LUA_REGISTRYINDEX, "elua_ptr"); + if (!lua_isnil(L, -1)) + { + void *st = lua_touserdata(L, -1); + lua_pop(L, 1); + return (Elua_State *)st; + } + lua_pop(L, 1); + return NULL; +} + static void _elua_errmsg(const char *pname, const char *msg) {