diff options
Diffstat (limited to 'libs/lua')
-rw-r--r-- | libs/lua/LuaBridge/detail/LuaRef.h | 5 | ||||
-rw-r--r-- | libs/lua/LuaBridge/detail/Userdata.h | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/libs/lua/LuaBridge/detail/LuaRef.h b/libs/lua/LuaBridge/detail/LuaRef.h index 8fae1c038a..46c756445e 100644 --- a/libs/lua/LuaBridge/detail/LuaRef.h +++ b/libs/lua/LuaBridge/detail/LuaRef.h @@ -180,6 +180,11 @@ private: return *this; } + // the implementation needs UserdataPtr, which + // is not yet defined here. + // -> libs/ardour/lua_api.cc + Proxy& clone_instance (const void* key, void* p); + //-------------------------------------------------------------------------- /** Assign a new value to this table key. diff --git a/libs/lua/LuaBridge/detail/Userdata.h b/libs/lua/LuaBridge/detail/Userdata.h index e832ef2dc1..feab28f132 100644 --- a/libs/lua/LuaBridge/detail/Userdata.h +++ b/libs/lua/LuaBridge/detail/Userdata.h @@ -302,6 +302,11 @@ ud __parent (nil) public: virtual ~Userdata () { } + static void* get_ptr (lua_State* L, int index) { + Userdata* ud = static_cast <Userdata*> (lua_touserdata (L, index)); + return ud->m_p; + } + //-------------------------------------------------------------------------- /** Returns the Userdata* if the class on the Lua stack matches. @@ -457,6 +462,15 @@ private: assert (m_p != 0); } + friend class LuaRef; + static inline void push_raw (lua_State* const L, void* p, const void* classkey) + { + new (lua_newuserdata (L, sizeof (UserdataPtr))) UserdataPtr (p); + lua_rawgetp (L, LUA_REGISTRYINDEX, classkey); + assert (lua_istable (L, -1)); + lua_setmetatable (L, -2); + } + public: /** Push non-const pointer to object. */ |