From 30aaaa4a200013a270ce89beadd88bc31a3bb4b8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 11 Apr 2010 14:56:12 +0300 Subject: [PATCH] LUA: store p_intf->p_sys separately --- modules/misc/lua/intf.c | 1 + modules/misc/lua/libs/misc.c | 36 ++++++++++++++++++++++++++++-------- modules/misc/lua/vlc.h | 3 +++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/modules/misc/lua/intf.c b/modules/misc/lua/intf.c index 2687e54516..1ceca46551 100644 --- a/modules/misc/lua/intf.c +++ b/modules/misc/lua/intf.c @@ -171,6 +171,7 @@ int Open_LuaIntf( vlc_object_t *p_this ) } vlclua_set_this( L, p_intf ); + vlclua_set_intf( L, p_sys ); luaL_openlibs( L ); diff --git a/modules/misc/lua/libs/misc.c b/modules/misc/lua/libs/misc.c index 3b1fbae65a..54bac3d2ce 100644 --- a/modules/misc/lua/libs/misc.c +++ b/modules/misc/lua/libs/misc.c @@ -47,24 +47,44 @@ #include "../vlc.h" #include "../libs.h" -#undef vlclua_set_this /***************************************************************************** * Internal lua<->vlc utils *****************************************************************************/ -void vlclua_set_this( lua_State *L, vlc_object_t *p_this ) +static void vlclua_set_object( lua_State *L, void *id, void *value ) { - lua_pushlightuserdata( L, vlclua_set_this ); - lua_pushlightuserdata( L, p_this ); + lua_pushlightuserdata( L, id ); + lua_pushlightuserdata( L, value ); lua_rawset( L, LUA_REGISTRYINDEX ); } -vlc_object_t * vlclua_get_this( lua_State *L ) +static void *vlclua_get_object( lua_State *L, void *id ) { - lua_pushlightuserdata( L, vlclua_set_this ); + lua_pushlightuserdata( L, id ); lua_rawget( L, LUA_REGISTRYINDEX ); - vlc_object_t *p_this = (vlc_object_t*)lua_topointer( L, -1 ); + const void *p = lua_topointer( L, -1 ); lua_pop( L, 1 ); - return p_this; + return (void *)p; +} + +#undef vlclua_set_this +void vlclua_set_this( lua_State *L, vlc_object_t *p_this ) +{ + vlclua_set_object( L, vlclua_set_this, p_this ); +} + +vlc_object_t * vlclua_get_this( lua_State *L ) +{ + return vlclua_get_object( L, vlclua_set_this ); +} + +void vlclua_set_intf( lua_State *L, intf_sys_t *p_intf ) +{ + vlclua_set_object( L, vlclua_set_intf, p_intf ); +} + +static intf_sys_t * vlclua_get_intf( lua_State *L ) +{ + return vlclua_get_object( L, vlclua_set_intf ); } /***************************************************************************** diff --git a/modules/misc/lua/vlc.h b/modules/misc/lua/vlc.h index 0669c2db0d..71dfcc7811 100644 --- a/modules/misc/lua/vlc.h +++ b/modules/misc/lua/vlc.h @@ -95,6 +95,9 @@ void vlclua_set_this( lua_State *, vlc_object_t * ); #define vlclua_set_this(a, b) vlclua_set_this(a, VLC_OBJECT(b)) vlc_object_t * vlclua_get_this( lua_State * ); +struct intf_sys_t; +void vlclua_set_intf( lua_State *, struct intf_sys_t * ); + /***************************************************************************** * Lua function bridge *****************************************************************************/ -- 2.39.2