From 10a0e290ac07524dc129cc2b227b0f9e95df0f8e Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Mon, 16 Apr 2012 09:39:52 -0500 Subject: first commit --- LuaThis.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 LuaThis.h (limited to 'LuaThis.h') 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 -- cgit