ARG_LIBDIR
};
-static Eina_List *elua_modlist = NULL;
static int elua_require_ref = LUA_REFNIL;
static int elua_appload_ref = LUA_REFNIL;
static const char *elua_progname = NULL;
}
static int
-elua_init_module(lua_State *L)
-{
- if (!lua_isnoneornil(L, 1))
- {
- lua_pushvalue(L, 1);
- lua_call(L, 0, 0);
- }
- if (!lua_isnoneornil(L, 2))
- {
- lua_pushvalue(L, 2);
- elua_modlist = eina_list_append(elua_modlist,
- (void*)(size_t)luaL_ref(L, LUA_REGISTRYINDEX));
- }
- return 0;
-}
-
-static int
elua_register_require(lua_State *L)
{
const char *corepath = elua_state_core_dir_get(elua_state);
void
elua_bin_shutdown(Elua_State *es, int c)
{
- void *data;
INF("elua shutdown");
-
- if (es) EINA_LIST_FREE(elua_modlist, data)
- {
- lua_rawgeti(elua_state_lua_state_get(es), LUA_REGISTRYINDEX, (size_t)data);
- lua_call(elua_state_lua_state_get(es), 0, 0);
- }
-
if (elua_prefix) eina_prefix_free(elua_prefix);
-
if (es) elua_state_free(es);
if (_el_log_domain != EINA_LOG_DOMAIN_GLOBAL)
eina_log_domain_unregister(_el_log_domain);
const luaL_reg cutillib[] =
{
- { "init_module", elua_init_module },
+ { "init_module", elua_module_init },
{ "popenv" , elua_io_popen },
{ NULL , NULL }
};
elua_state_free(Elua_State *es)
{
if (!es) return;
- if (es->luastate) lua_close(es->luastate);
+ if (es->luastate)
+ {
+ void *data;
+ EINA_LIST_FREE(es->cmods, data)
+ {
+ lua_rawgeti(es->luastate, LUA_REGISTRYINDEX, (size_t)data);
+ lua_call(es->luastate, 0, 0);
+ }
+ lua_close(es->luastate);
+ }
+ else if (es->cmods)
+ eina_list_free(es->cmods);
eina_stringshare_del(es->coredir);
eina_stringshare_del(es->moddir);
eina_stringshare_del(es->appsdir);
lua_setfield(es->luastate, -2, "dngettext");
#endif
}
+
+EAPI int
+elua_module_init(lua_State *L)
+{
+ Elua_State *es = elua_state_from_lua_get(L);
+ if (!lua_isnoneornil(L, 1))
+ {
+ lua_pushvalue(L, 1);
+ lua_call(L, 0, 0);
+ }
+ if (!lua_isnoneornil(L, 2))
+ {
+ lua_pushvalue(L, 2);
+ es->cmods = eina_list_append(es->cmods,
+ (void*)(size_t)luaL_ref(L, LUA_REGISTRYINDEX));
+ }
+ return 0;
+}