aboutsummaryrefslogtreecommitdiff
path: root/LuaThis.h
diff options
context:
space:
mode:
Diffstat (limited to 'LuaThis.h')
-rw-r--r--LuaThis.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/LuaThis.h b/LuaThis.h
new file mode 100644
index 0000000..ac9712f
--- /dev/null
+++ b/LuaThis.h
@@ -0,0 +1,58 @@
+// ---------------------------------------------------------------------------
+// FILE NAME : LuaThis.h
+// ---------------------------------------------------------------------------
+// DESCRIPTION :
+//
+// Controls the "this" table
+//
+// ---------------------------------------------------------------------------
+// VERSION : 1.01
+// DATE : 1-Sep-2005
+// AUTHOR : Richard Shephard
+// ---------------------------------------------------------------------------
+// LIBRARY INCLUDE FILES
+#ifndef __LUA_THIS_H__
+#define __LUA_THIS_H__
+
+#include "luainc.h"
+#include "luavirtualmachine.h"
+
+// Sets the "this" global table that scripts use
+
+class CLuaThis
+{
+public:
+ CLuaThis (CLuaVirtualMachine& vm, int iRef) : m_iOldRef (0), m_vm (vm)
+ {
+ lua_State *state = (lua_State *) vm;
+ if (vm.Ok ())
+ {
+ // Save the old "this" table
+ lua_getglobal (state, "this");
+ m_iOldRef = luaL_ref (state, LUA_REGISTRYINDEX);
+
+ // replace it with our new one
+ lua_rawgeti(state, LUA_REGISTRYINDEX, iRef);
+ lua_setglobal (state, "this");
+ }
+ }
+
+ virtual ~CLuaThis (void)
+ {
+ lua_State *state = (lua_State *) m_vm;
+ if (m_iOldRef > 0 && m_vm.Ok ())
+ {
+ // Replace the old "this" table
+ lua_rawgeti(state, LUA_REGISTRYINDEX, m_iOldRef);
+ lua_setglobal (state, "this");
+ luaL_unref (state, LUA_REGISTRYINDEX, m_iOldRef);
+ }
+ }
+
+
+protected:
+ int m_iOldRef;
+ CLuaVirtualMachine& m_vm;
+};
+
+#endif // __LUA_THIS_H__ \ No newline at end of file