From: John L. <jr...@us...> - 2007-12-13 00:48:21
|
Update of /cvsroot/wxlua/wxLua/bindings In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv15370/wxLua/bindings Modified Files: genwxbind.lua Log Message: * Allowed using wxObject:DynamicCast() on an object and be able to use the object as both types. The problem was that wxEvent:GetEventObject() returned a wxObject which overwrote the wxWindow (perhaps) that you had as a userdata in Lua already. Additionally, if you delete an object all of the userdata that wrap it have their metatables cleared for safety. Functions renamed since they didn't do the same thing or behave the same. wxluaO_istrackedobject -> wxluaO_isgcobject wxluaO_addtrackedobject -> wxluaO_addgcobject wxluaO_removetrackedobject -> wxluaO_deletegcobject - Created a central luauserdata:delete() function for the bindings to reduce code. wxLua_wxluabind_delete(L) wxLuaStackDialog: You can expand both key and values of a table and more information is provided about items wxLua knows about. Index: genwxbind.lua =================================================================== RCS file: /cvsroot/wxlua/wxLua/bindings/genwxbind.lua,v retrieving revision 1.153 retrieving revision 1.154 diff -C2 -d -r1.153 -r1.154 *** genwxbind.lua 10 Dec 2007 05:39:04 -0000 1.153 --- genwxbind.lua 13 Dec 2007 00:47:47 -0000 1.154 *************** *** 3249,3258 **** if param.GC then if dataTypeTable[argType]["%encapsulate"] then ! table.insert(gcList, " if (!wxluaO_istrackedobject(L, "..argName..")) wxluaO_addtrackedobject(L, (void*)"..argName..", new wxLua_wxObject_"..MakeVar(argType).."("..argName.."));\n") else ! table.insert(gcList, " if (!wxluaO_istrackedobject(L, "..argName..")) wxluaO_addtrackedobject(L, "..argName..");\n") end elseif param.UnGC then ! table.insert(gcList, " if (wxluaO_istrackedobject(L, "..argName..")) wxluaO_removetrackedobject(L, "..argName..", wxLUA_UNDELETE_OBJECT);\n") end --- 3249,3258 ---- if param.GC then if dataTypeTable[argType]["%encapsulate"] then ! table.insert(gcList, " if (!wxluaO_isgcobject(L, "..argName..")) wxluaO_addgcobject(L, (void*)"..argName..", new wxLua_wxObject_"..MakeVar(argType).."("..argName.."));\n") else ! table.insert(gcList, " if (!wxluaO_isgcobject(L, "..argName..")) wxluaO_addgcobject(L, "..argName..");\n") end elseif param.UnGC then ! table.insert(gcList, " if (wxluaO_isgcobject(L, "..argName..")) wxluaO_deletegcobject(L, "..argName..", wxLUA_UNDELETE_OBJECT);\n") end *************** *** 3564,3570 **** if parseObject["%encapsulate"] then ! table.insert(codeList, " wxluaO_addtrackedobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(parseObject.Name).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxluaO_addtrackedobject(L, returns);\n") end elseif not parseObject["%noclassinfo"] then --- 3564,3570 ---- if parseObject["%encapsulate"] then ! table.insert(codeList, " wxluaO_addgcobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(parseObject.Name).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxluaO_addgcobject(L, returns);\n") end elseif not parseObject["%noclassinfo"] then *************** *** 3591,3600 **** if parseObject["%ungc_this"] then ! table.insert(codeList, " wxluaO_removetrackedobject(L, self, wxLUA_UNDELETE_OBJECT);\n") elseif parseObject["%gc_this"] then if parseObject["%encapsulate"] then ! table.insert(codeList, " if (!wxluaO_istrackedobject(L, self)) wxluaO_addtrackedobject(L, (void*)self, new wxLua_wxObject_"..MakeClassVar(parseObject.Name).."(self));\n") else ! table.insert(codeList, " wxluaO_addtrackedobject(L, self);\n") end end --- 3591,3600 ---- if parseObject["%ungc_this"] then ! table.insert(codeList, " wxluaO_deletegcobject(L, self, wxLUA_UNDELETE_OBJECT);\n") elseif parseObject["%gc_this"] then if parseObject["%encapsulate"] then ! table.insert(codeList, " if (!wxluaO_isgcobject(L, self)) wxluaO_addgcobject(L, (void*)self, new wxLua_wxObject_"..MakeClassVar(parseObject.Name).."(self));\n") else ! table.insert(codeList, " wxluaO_addgcobject(L, self);\n") end end *************** *** 3654,3660 **** if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " wxluaO_addtrackedobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(memberType).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxluaO_addtrackedobject(L, ("..returnCast..")returns);\n") end --- 3654,3660 ---- if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " wxluaO_addgcobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(memberType).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxluaO_addgcobject(L, ("..returnCast..")returns);\n") end *************** *** 3666,3675 **** if member.GC then if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " if (!wxluaO_istrackedobject(L, returns)) wxluaO_addtrackedobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(memberType).."(returns));\n") else ! table.insert(codeList, " if (!wxluaO_istrackedobject(L, returns)) wxluaO_addtrackedobject(L, returns);\n") end elseif member.UnGC then ! table.insert(codeList, " if (wxluaO_istrackedobject(L, returns)) wxluaO_removetrackedobject(L, returns, wxLUA_UNDELETE_OBJECT);\n") end --- 3666,3675 ---- if member.GC then if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " if (!wxluaO_isgcobject(L, returns)) wxluaO_addgcobject(L, (void*)returns, new wxLua_wxObject_"..MakeVar(memberType).."(returns));\n") else ! table.insert(codeList, " if (!wxluaO_isgcobject(L, returns)) wxluaO_addgcobject(L, returns);\n") end elseif member.UnGC then ! table.insert(codeList, " if (wxluaO_isgcobject(L, returns)) wxluaO_deletegcobject(L, returns, wxLUA_UNDELETE_OBJECT);\n") end *************** *** 3825,3840 **** -- delete routine codeList = {} ! local funcName = "wxLua_"..MakeVar(parseObject.Name).."_delete" ! table.insert(codeList, "static int LUACALL "..funcName.."(lua_State *L)\n{\n") ! table.insert(codeList, " wxLuaState wxlState(L);\n") ! table.insert(codeList, " "..parseObject.Name.." * self = ("..parseObject.Name.." *)wxluaT_getuserdatatype(L, 1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") ! CommentBindingTable(codeList, " // if removed from tracked mem list, reset the tag so that gc() is not called on this object.\n") ! table.insert(codeList, " if ((self != NULL) && wxluaO_removetrackedobject(L, self, wxLUA_DELETE_CLEAR_OBJECT))\n") ! table.insert(codeList, " {\n") ! table.insert(codeList, " lua_pushnil(L);\n") ! table.insert(codeList, " lua_setmetatable(L, -2);\n") ! table.insert(codeList, " }\n") ! table.insert(codeList, " return 0;\n") ! table.insert(codeList, "}\n") local funcMapName = "s_wxluafunc_"..funcName --- 3825,3848 ---- -- delete routine codeList = {} ! local funcName = "wxLua_"..MakeVar(parseObject.Name).."_delete" ! local funcName_ = funcName ! ! if false then ! table.insert(codeList, "static int LUACALL "..funcName.."(lua_State *L)\n{\n") ! table.insert(codeList, " return wxLua_wxlua_delete(L);\n") ! --[[ ! table.insert(codeList, " "..parseObject.Name.." * self = ("..parseObject.Name.." *)wxluaT_getuserdatatype(L, 1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") ! CommentBindingTable(codeList, " // if removed from tracked mem list, reset the tag so that gc() is not called on this object.\n") ! table.insert(codeList, " if ((self != NULL) && wxluaO_deletegcobject(L, self, wxLUA_DELETE_REMOVE_OBJECT))\n") ! table.insert(codeList, " {\n") ! table.insert(codeList, " lua_pushnil(L);\n") ! table.insert(codeList, " lua_setmetatable(L, -2);\n") ! table.insert(codeList, " }\n") ! table.insert(codeList, " return 0;\n") ! table.insert(codeList, "}\n") ! --]] ! elseif not overrideTable[funcName] then ! funcName_ = "wxLua_wxluabind_delete" ! end local funcMapName = "s_wxluafunc_"..funcName *************** *** 3850,3857 **** { LuaName = "delete", ! CFunctionName = funcName, Method = codeList, FuncType = "WXLUAMETHOD_METHOD", ! FuncMap = "{ "..funcName..", WXLUAMETHOD_METHOD|WXLUAMETHOD_DELETE, 1, 1, "..overload_argListName.." }", FuncMapName = funcMapName, ArgArray = overload_argList, --- 3858,3865 ---- { LuaName = "delete", ! CFunctionName = funcName_, Method = codeList, FuncType = "WXLUAMETHOD_METHOD", ! FuncMap = "{ "..funcName_..", WXLUAMETHOD_METHOD|WXLUAMETHOD_DELETE, 1, 1, "..overload_argListName.." }", FuncMapName = funcMapName, ArgArray = overload_argList, *************** *** 3864,3870 **** -- Override Generated Method Code ! if overrideTable[delMethodBinding.CFunctionName] then ! delMethodBinding.Method = overrideTable[delMethodBinding.CFunctionName] ! overrideTableUsed[delMethodBinding.CFunctionName] = true end --- 3872,3878 ---- -- Override Generated Method Code ! if overrideTable[funcName] then ! delMethodBinding.Method = overrideTable[funcName] ! overrideTableUsed[funcName] = true end *************** *** 4658,4662 **** end if functionBinding.FuncMapName then ! table.insert(fileData, "static int LUACALL "..functionBinding.CFunctionName.."(lua_State *L);\n") table.insert(fileData, "static wxLuaBindCFunc "..functionBinding.FuncMapName.."[1] = {"..functionBinding.FuncMap.."};\n") end --- 4666,4672 ---- end if functionBinding.FuncMapName then ! if functionBinding.CFunctionName ~= "wxLua_wxluabind_delete" then ! table.insert(fileData, "static int LUACALL "..functionBinding.CFunctionName.."(lua_State *L);\n") ! end table.insert(fileData, "static wxLuaBindCFunc "..functionBinding.FuncMapName.."[1] = {"..functionBinding.FuncMap.."};\n") end |