From: Janos Kovacs Date: Mon, 10 Dec 2012 19:46:18 +0000 (+0200) Subject: lua-utils: add object destructor X-Git-Tag: accepted/2.0alpha/20121211.005056~29 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f137e6a915a9c2d73f336a05d82be656c7f61882;p=profile%2Fivi%2Fmurphy.git lua-utils: add object destructor --- 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);