From f137e6a915a9c2d73f336a05d82be656c7f61882 Mon Sep 17 00:00:00 2001 From: Janos Kovacs Date: Mon, 10 Dec 2012 21:46:18 +0200 Subject: [PATCH] lua-utils: add object destructor --- src/core/lua-utils/object.c | 25 ++++++++++++++++++++++++- src/core/lua-utils/object.h | 2 ++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/core/lua-utils/object.c b/src/core/lua-utils/object.c index 0355346..b80630e 100644 --- a/src/core/lua-utils/object.c +++ b/src/core/lua-utils/object.c @@ -172,6 +172,30 @@ void mrp_lua_set_object_name(lua_State *L, } } +void mrp_lua_destroy_object(lua_State *L, const char *name, void *data) +{ + static int offset = ((userdata_t *)0)->data - (char *)0; + + userdata_t *userdata = (userdata_t *)(data - offset); + mrp_lua_classdef_t *def; + + if (data && userdata == userdata->self && userdata->dead) { + def = userdata->def; + + luaL_unref(L, LUA_REGISTRYINDEX, userdata->luatbl); + + mrp_lua_get_class_table(L, def); + luaL_checktype(L, -1, LUA_TTABLE); + + lua_pushstring(L, name); + lua_pushnil(L); + + lua_rawset(L, -3); + + lua_pop(L, 1); + } +} + int mrp_lua_find_object(lua_State *L, mrp_lua_classdef_t *def,const char *name) { if (!name) @@ -267,7 +291,6 @@ int mrp_lua_push_object(lua_State *L, void *data) } - static bool valid_id(const char *id) { const char *p; diff --git a/src/core/lua-utils/object.h b/src/core/lua-utils/object.h index 1c1761f..b27323a 100644 --- a/src/core/lua-utils/object.h +++ b/src/core/lua-utils/object.h @@ -132,6 +132,8 @@ void *mrp_lua_create_object(lua_State *L, mrp_lua_classdef_t *class, void mrp_lua_set_object_name(lua_State *L, mrp_lua_classdef_t *def, const char *name); +void mrp_lua_destroy_object(lua_State *L, const char *name, void *object); + int mrp_lua_find_object(lua_State *L, mrp_lua_classdef_t *def, const char *name); -- 2.7.4