/* Load Lua libraries */
luaL_openlibs( L ); /* FIXME: Don't open all the libs? */
+ vlclua_set_this( L, p_demux );
luaL_register( L, "vlc", p_reg );
luaopen_msg( L );
luaopen_strings( L );
luaopen_stream( L );
luaopen_xml( L );
luaopen_md5( L );
- lua_pushlightuserdata( L, p_demux );
- lua_setfield( L, -2, "private" );
lua_pushstring( L, p_demux->psz_path );
lua_setfield( L, -2, "path" );
lua_pushstring( L, p_demux->psz_access );
msg_Err( p_mgr, "Could not create new Lua State" );
return NULL;
}
+ vlclua_set_this( L, p_mgr );
+
luaL_openlibs( L );
luaL_register( L, "vlc", p_reg );
luaopen_msg( L );
- lua_pushlightuserdata( L, p_mgr );
- lua_setfield( L, -2, "private" );
-
lua_pushlightuserdata( L, p_ext );
lua_setfield( L, -2, "extension" );
goto error;
}
+ vlclua_set_this( L, p_intf );
+
luaL_openlibs( L );
/* register our functions */
luaL_register( L, "vlc", p_reg );
- /* store a pointer to p_intf (FIXME: user could overwrite this) */
- lua_pushlightuserdata( L, p_intf );
- lua_setfield( L, -2, "private" );
-
/* register submodules */
luaopen_acl( L );
luaopen_config( L );
/*****************************************************************************
* Internal lua<->vlc utils
*****************************************************************************/
+void __vlclua_set_this( lua_State *L, vlc_object_t *p_this )
+{
+ lua_pushlightuserdata( L, __vlclua_set_this );
+ lua_pushlightuserdata( L, p_this );
+ lua_rawset( L, LUA_REGISTRYINDEX );
+}
+
vlc_object_t * vlclua_get_this( lua_State *L )
{
- vlc_object_t * p_this;
- lua_getglobal( L, "vlc" );
- lua_getfield( L, -1, "private" );
- p_this = (vlc_object_t*)lua_topointer( L, lua_gettop( L ) );
- lua_pop( L, 2 );
+ lua_pushlightuserdata( L, __vlclua_set_this );
+ lua_rawget( L, LUA_REGISTRYINDEX );
+ vlc_object_t *p_this = (vlc_object_t*)lua_topointer( L, -1 );
+ lua_pop( L, 1 );
return p_this;
}
return NULL;
}
+ vlclua_set_this( L, p_this );
+
/* Load Lua libraries */
luaL_openlibs( L ); /* XXX: Don't open all the libs? */
luaopen_md5( L );
luaopen_input_item( L, p_item );
- lua_pushlightuserdata( L, p_this );
- lua_setfield( L, -2, "private" );
-
if( vlclua_add_modules_path( p_this, L, psz_filename ) )
{
msg_Warn( p_this, "Error while setting the module search path for %s",
msg_Err( p_sd, "Could not create new Lua State" );
goto error;
}
+ vlclua_set_this( L, p_sd );
luaL_openlibs( L );
luaL_register( L, "vlc", p_reg );
- lua_pushlightuserdata( L, p_sd );
- lua_setfield( L, -2, "private" );
luaopen_input( L );
luaopen_msg( L );
luaopen_misc( L );
return luaL_checkstring( L, narg );
}
+#define vlclua_set_this(a, b) __vlclua_set_this(a, VLC_OBJECT(b))
+void __vlclua_set_this( lua_State *, vlc_object_t * );
vlc_object_t * vlclua_get_this( lua_State * );
/*****************************************************************************