diff options
author | chai <chaifix@163.com> | 2018-11-22 16:15:48 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-11-22 16:15:48 +0800 |
commit | cfa05003be67344fbc79c338c2ac82f0accd979d (patch) | |
tree | 3ed1fa8cdeaf6210b1fd6271f28af24ab41ee55a /src/lua/common/je_lua.cpp | |
parent | a0a1e1609fd65c2fe103cfe5a4532b7ccd492c7f (diff) |
*修改argc
Diffstat (limited to 'src/lua/common/je_lua.cpp')
-rw-r--r-- | src/lua/common/je_lua.cpp | 78 |
1 files changed, 63 insertions, 15 deletions
diff --git a/src/lua/common/je_lua.cpp b/src/lua/common/je_lua.cpp index 748606b..2011e15 100644 --- a/src/lua/common/je_lua.cpp +++ b/src/lua/common/je_lua.cpp @@ -5,6 +5,18 @@ namespace JinEngine namespace Lua { + lua_State * LuaState::mL = nullptr; + + void LuaState::set(lua_State* L) + { + mL = L; + } + + lua_State* LuaState::get() + { + return mL; + } + /// /// Lua objects table. Map object to proxy, like objects_table[object] = proxy. /// @@ -33,45 +45,81 @@ namespace JinEngine return proxy; } - int luax_getobject(lua_State* L, SharedBase* shadred) + int luax_getobject(lua_State* L, SharedBase* shared) { luax_getobjectstable(L); - luax_pushlightuserdata(L, shadred); + luax_pushlightuserdata(L, shared); luax_gettable(L, -2); luax_remove(L, -2); // Remove objects table on stack. return 1; } - int luax_getregistrytable(lua_State* L, const char* tbl) + void luax_removeobject(lua_State* L, SharedBase* shared) { - luax_getfield(L, LUA_REGISTRYINDEX, tbl); + luax_getobjectstable(L); + luax_pushlightuserdata(L, shared); + luax_pushnil(L); + luax_settable(L, -3); + luax_pop(L, 1); + } + + int luax_getobjectstable(lua_State* L) + { + luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Objects_Table); // If no such table, add one. if (luax_isnil(L, -1) || !luax_istable(L, -1)) { luax_pop(L, 1); luax_newtable(L); - luax_pushstring(L, tbl); - luax_pushvalue(L, -2); - luax_settable(L, LUA_REGISTRYINDEX); - } - return 1; - } - int luax_getobjectstable(lua_State* L) - { - luax_getregistrytable(L, Jin_Lua_Objects_Table); + // metatable + luax_newtable(L); + // weak table + luax_pushliteral(L, "v"); + luax_setfield(L, -2, "__mode"); + // setmetatable(newtable, metatable) + luax_setmetatable(L, -2); + + luax_pushvalue(L, -1); + luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Objects_Table); + } return 1; } int luax_getmodulestable(lua_State* L) { - luax_getregistrytable(L, Jin_Lua_Modules_Table); + luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Modules_Table); + // If no such table, add one. + if (luax_isnil(L, -1) || !luax_istable(L, -1)) + { + luax_pop(L, 1); + luax_newtable(L); + + // metatable + luax_newtable(L); + // weak table + luax_pushliteral(L, "v"); + luax_setfield(L, -2, "__mode"); + // setmetatable(newtable, metatable) + luax_setmetatable(L, -2); + + luax_pushvalue(L, -1); + luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Modules_Table); + } return 1; } int luax_getreferencestable(lua_State* L) { - luax_getregistrytable(L, Jin_Lua_Reference_Table); + luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Reference_Table); + // If no such table, add one. + if (luax_isnil(L, -1) || !luax_istable(L, -1)) + { + luax_pop(L, 1); + luax_newtable(L); + luax_pushvalue(L, -1); + luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Reference_Table); + } return 1; } |