summaryrefslogtreecommitdiff
path: root/libs/lua/LuaBridge/detail/Userdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/lua/LuaBridge/detail/Userdata.h')
-rw-r--r--libs/lua/LuaBridge/detail/Userdata.h14
1 files changed, 14 insertions, 0 deletions
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.
*/