From: John L. <jr...@us...> - 2007-12-07 02:13:43
|
Update of /cvsroot/wxlua/wxLua/bindings In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv12976/wxLua/bindings Modified Files: genwxbind.lua Log Message: Too many changes to list... A large portion of the internal workings of the wxLuaState have been rewritten. All of the data that was stored in wxLuaStateData that might be needed by a function taking a lua_State* is now in the LUA_REGISTRYINDEX. C functions have been added to access these values. The generated bindings no longer need to have "wxLuaState wxlState(L);" since everything can be done with the C functions. The result is that wxLua should be faster. Index: genwxbind.lua =================================================================== RCS file: /cvsroot/wxlua/wxLua/bindings/genwxbind.lua,v retrieving revision 1.150 retrieving revision 1.151 diff -C2 -d -r1.150 -r1.151 *** genwxbind.lua 17 Nov 2007 00:14:54 -0000 1.150 --- genwxbind.lua 7 Dec 2007 02:13:09 -0000 1.151 *************** *** 18,22 **** -- --------------------------------------------------------------------------- ! WXLUA_BINDING_VERSION = 18 -- Used to verify that the bindings are updated -- This must match modules/wxlua/include/wxldefs.h -- otherwise a compile time error will be generated. --- 18,22 ---- -- --------------------------------------------------------------------------- ! WXLUA_BINDING_VERSION = 19 -- Used to verify that the bindings are updated -- This must match modules/wxlua/include/wxldefs.h -- otherwise a compile time error will be generated. *************** *** 2632,2635 **** --- 2632,2655 ---- -- --------------------------------------------------------------------------- + -- Remove the code line wxLuaState wxlState(L); if it won't be used. + -- --------------------------------------------------------------------------- + + function RemovewxLuaStateIfNotUsed(codeList) + -- remove the wxLuaState if we don't use it + local needs_wxluastate = -1 + for i = 1, #codeList do + if string.find(codeList[i], "wxLuaState wxl", 1, 1) then + needs_wxluastate = i + elseif string.find(codeList[i], "wxlState", 1, 1) then + needs_wxluastate = -1 + break + end + end + if (needs_wxluastate > 0) then + table.remove(codeList, needs_wxluastate) + end + end + + -- --------------------------------------------------------------------------- -- Create Language Binding - This generates c-binding to Lua interpreter -- --------------------------------------------------------------------------- *************** *** 2728,2748 **** table.insert(codeList, " wxLuaState wxlState(L);\n") CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." *self = ("..parseObject.Name.." *) wxlState.GetUserDataType(1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList if memberType == "wxString" then CommentBindingTable(codeList, " // push the result string\n") ! table.insert(codeList, " wxlState.lua_PushString(self->"..member.Name..");\n") elseif not numeric and (not memberPtr or (memberPtr == "&")) then CommentBindingTable(codeList, " // push the result datatype\n") -- if string.find(member.Name, "::") then ! -- table.insert(codeList, " wxlState.PushUserDataType(s_wxluatag_"..MakeClassVar(memberType)..", "..member.Name..");\n") -- else ! table.insert(codeList, " wxlState.PushUserDataType(s_wxluatag_"..MakeClassVar(memberType)..", &self->"..member.Name..");\n") -- end elseif not numeric then CommentBindingTable(codeList, " // push the result datatype\n") ! table.insert(codeList, " wxlState.PushUserDataType(s_wxluatag_"..MakeClassVar(memberType)..", self->"..member.Name..");\n") elseif (memberType == "BOOL") or (memberType == "bool") then --- 2748,2768 ---- table.insert(codeList, " wxLuaState wxlState(L);\n") CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." *self = ("..parseObject.Name.." *)wxluaT_getuserdatatype(L, 1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList if memberType == "wxString" then CommentBindingTable(codeList, " // push the result string\n") ! table.insert(codeList, " wxlua_pushwxString(L, self->"..member.Name..");\n") elseif not numeric and (not memberPtr or (memberPtr == "&")) then CommentBindingTable(codeList, " // push the result datatype\n") -- if string.find(member.Name, "::") then ! -- table.insert(codeList, " wxluaT_pushuserdatatype(L, s_wxluatag_"..MakeClassVar(memberType)..", "..member.Name..");\n") -- else ! table.insert(codeList, " wxluaT_pushuserdatatype(L, s_wxluatag_"..MakeClassVar(memberType)..", &self->"..member.Name..");\n") -- end elseif not numeric then CommentBindingTable(codeList, " // push the result datatype\n") ! table.insert(codeList, " wxluaT_pushuserdatatype(L, s_wxluatag_"..MakeClassVar(memberType)..", self->"..member.Name..");\n") elseif (memberType == "BOOL") or (memberType == "bool") then *************** *** 2766,2769 **** --- 2786,2791 ---- end + RemovewxLuaStateIfNotUsed(codeList) + local funcMapName = "s_wxluafunc_"..funcName *************** *** 2819,2831 **** overload_argList = overload_argList.."&s_wxluaarg_String, " CommentBindingTable(codeList, " // get the string value\n") ! table.insert(codeList, " wxString val = wxlState.GetwxStringType(2);\n") elseif not numeric and (not memberPtr or (memberPtr == "&")) then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(memberType)..", " CommentBindingTable(codeList, " // get the data type value\n") ! table.insert(codeList, " "..memberType.."* val = ("..memberType.."*)wxlState.GetUserDataType(2, s_wxluatag_"..MakeClassVar(memberType)..");\n") elseif not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(memberType)..", " CommentBindingTable(codeList, " // get the data type value\n") ! table.insert(codeList, " "..memberType.."* val = ("..memberType.."*)wxlState.GetUserDataType(2, s_wxluatag_"..MakeClassVar(memberType)..");\n") elseif (memberType == "BOOL") or (memberType == "bool") then overload_argList = overload_argList.."&s_wxluaarg_Boolean, " --- 2841,2853 ---- overload_argList = overload_argList.."&s_wxluaarg_String, " CommentBindingTable(codeList, " // get the string value\n") ! table.insert(codeList, " wxString val = wxlua_getwxstringtype(L, 2);\n") elseif not numeric and (not memberPtr or (memberPtr == "&")) then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(memberType)..", " CommentBindingTable(codeList, " // get the data type value\n") ! table.insert(codeList, " "..memberType.."* val = ("..memberType.."*)wxluaT_getuserdatatype(L, 2, s_wxluatag_"..MakeClassVar(memberType)..");\n") elseif not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(memberType)..", " CommentBindingTable(codeList, " // get the data type value\n") ! table.insert(codeList, " "..memberType.."* val = ("..memberType.."*)wxluaT_getuserdatatype(L, 2, s_wxluatag_"..MakeClassVar(memberType)..");\n") elseif (memberType == "BOOL") or (memberType == "bool") then overload_argList = overload_argList.."&s_wxluaarg_Boolean, " *************** *** 2843,2847 **** CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." *self = ("..parseObject.Name.." *)wxlState.GetUserDataType(1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList --- 2865,2869 ---- CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." *self = ("..parseObject.Name.." *)wxluaT_getuserdatatype(L, 1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList *************** *** 2863,2866 **** --- 2885,2890 ---- end + RemovewxLuaStateIfNotUsed(codeList) + local funcMapName = "s_wxluafunc_"..funcName *************** *** 3121,3141 **** ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxArrayString, " ! argItem = "wxArrayString(); wxlState.GetwxArrayString("..argNum..", "..argName..")" ! declare = "wxArrayString " elseif ((argType == "wxSortedArrayString") and ((indirectionCount == 0) or ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxSortedArrayString, " ! argItem = "wxArrayString(); wxlState.GetwxArrayString("..argNum..", "..argName..")" ! declare = "wxSortedArrayString " elseif ((argType == "wxArrayInt") and ((indirectionCount == 0) or ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxArrayInt, " ! argItem = "wxArrayInt(); wxlState.GetwxArrayInt("..argNum..", "..argName..")" ! declare = "wxArrayInt " elseif argType == "IntArray_FromLuaTable" then overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "NULL; ptr = "..argName.." = wxlState.GetIntArray("..argNum..", count_)" declare = "int count_ = 0; wxLuaSmartIntArray ptr; int*" argList = argList.."count_, " --- 3145,3165 ---- ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxArrayString, " ! argItem = "wxlua_getwxArrayString(L, "..argNum..")" ! declare = "wxLuaSmartwxArrayString" elseif ((argType == "wxSortedArrayString") and ((indirectionCount == 0) or ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxSortedArrayString, " ! argItem = "wxlua_getwxSortedArrayString(L, "..argNum..")" ! declare = "wxLuaSmartwxSortedArrayString" elseif ((argType == "wxArrayInt") and ((indirectionCount == 0) or ((indirectionCount == 1) and (argPtr == "&") and string.find(argTypeWithAttrib, "const", 1, 1)))) then overload_argList = overload_argList.."&s_wxluatag_wxArrayInt, " ! argItem = "wxlua_getwxArrayInt(L, "..argNum..")" ! declare = "wxLuaSmartwxArrayInt" elseif argType == "IntArray_FromLuaTable" then overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "NULL; ptr = "..argName.." = wxlua_getintarray(L, "..argNum..", count_)" declare = "int count_ = 0; wxLuaSmartIntArray ptr; int*" argList = argList.."count_, " *************** *** 3163,3167 **** overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "wxlState.GetStringArray("..argNum..", count)" --declare = "int count = 0; wxLuaSmartStringArray ptr; "..argTypeWithAttrib.." "..argName.."; ptr = " declare = "int count = 0; wxLuaSmartStringArray " --- 3187,3191 ---- overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "wxlua_getwxStringarray("..argNum..", count)" --declare = "int count = 0; wxLuaSmartStringArray ptr; "..argTypeWithAttrib.." "..argName.."; ptr = " declare = "int count = 0; wxLuaSmartStringArray " *************** *** 3173,3188 **** overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "wxlState.GetIntArray("..argNum..", count)" --declare = "int count = 0; wxLuaSmartIntArray ptr; "..argTypeWithAttrib.." "..argName.."; ptr = " declare = "int count = 0; wxLuaSmartIntArray " elseif not numeric then ! argItem = "("..argTypeWithAttrib..") wxlState.GetUserDataType("..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else ! argItem = "("..argTypeWithAttrib..") wxlState.wxlua_ToUserdata("..argNum..")" end elseif (indirectionCount == 1) and (argPtr == "*") then if (argType == "wxString") or (argType == "wxChar") then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlState.GetwxStringType("..argNum..")" -- Default String Value --- 3197,3212 ---- overload_argList = overload_argList.."&s_wxluaarg_Table, " ! argItem = "wxlua_getintarray(L, "..argNum..", count)" --declare = "int count = 0; wxLuaSmartIntArray ptr; "..argTypeWithAttrib.." "..argName.."; ptr = " declare = "int count = 0; wxLuaSmartIntArray " elseif not numeric then ! argItem = "("..argTypeWithAttrib..")wxluaT_getuserdatatype(L, "..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else ! argItem = "("..argTypeWithAttrib..")wxlua_touserdata(L, "..argNum..")" end elseif (indirectionCount == 1) and (argPtr == "*") then if (argType == "wxString") or (argType == "wxChar") then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlua_getwxstringtype(L, "..argNum..")" -- Default String Value *************** *** 3204,3208 **** elseif argType == "char" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlState.GetStringType("..argNum..")" argTypeWithAttrib = "wxCharBuffer" --- 3228,3232 ---- elseif argType == "char" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlua_getstringtype(L, "..argNum..")" argTypeWithAttrib = "wxCharBuffer" *************** *** 3217,3234 **** if not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "("..argTypeWithAttrib..")wxlState.GetUserDataType("..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " ! argItem = "("..argTypeWithAttrib..")wxlState.wxlua_ToUserdata("..argNum..")" end if param.GC then if dataTypeTable[argType]["%encapsulate"] then ! table.insert(gcList, " if (!wxlState.IsTrackedObject("..argName..")) wxlState.AddTrackedObject((long)"..argName..", new wxLua_wxObject_"..MakeVar(argType).."("..argName.."));\n") else ! table.insert(gcList, " if (!wxlState.IsTrackedObject("..argName..")) wxlState.AddTrackedObject("..argName..");\n") end elseif param.UnGC then ! table.insert(gcList, " if (wxlState.IsTrackedObject("..argName..")) wxlState.RemoveTrackedObject("..argName..", wxLuaState::UNDELETE_OBJECT);\n") end --- 3241,3258 ---- if not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "("..argTypeWithAttrib..")wxluaT_getuserdatatype(L, "..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " ! argItem = "("..argTypeWithAttrib..")wxlua_touserdata(L, "..argNum..")" end 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 *************** *** 3238,3251 **** overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " argTypeWithAttrib = argTypeWithAttrib.." **" ! argItem = "("..argTypeWithAttrib..")wxlState.GetUserDataType("..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " argTypeWithAttrib = argTypeWithAttrib.." *" ! argItem = "("..argTypeWithAttrib..")wxlState.wxlua_ToUserdata("..argNum..")" end elseif (indirectionCount == 1) and (argPtr == "&") then if argType == "wxString" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlState.GetwxStringType("..argNum..")" -- Default String Value --- 3262,3275 ---- overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " argTypeWithAttrib = argTypeWithAttrib.." **" ! argItem = "("..argTypeWithAttrib..")wxluaT_getuserdatatype(L, "..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " argTypeWithAttrib = argTypeWithAttrib.." *" ! argItem = "("..argTypeWithAttrib..")wxlua_touserdata(L, "..argNum..")" end elseif (indirectionCount == 1) and (argPtr == "&") then if argType == "wxString" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlua_getwxstringtype(L, "..argNum..")" -- Default String Value *************** *** 3263,3270 **** if not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "("..argTypeWithAttrib..")wxlState.GetUserDataType("..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " ! argItem = "("..argTypeWithAttrib..")wxlState.wxlua_ToUserdata("..argNum..")" end --- 3287,3294 ---- if not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "("..argTypeWithAttrib..")wxluaT_getuserdatatype(L, "..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_LightUserData, " ! argItem = "("..argTypeWithAttrib..")wxlua_touserdata(L, "..argNum..")" end *************** *** 3277,3281 **** if argType == "wxString" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlState.GetwxStringType("..argNum..")" -- Default String Value --- 3301,3305 ---- if argType == "wxString" then overload_argList = overload_argList.."&s_wxluaarg_String, " ! argItem = "wxlua_getwxstringtype(L, "..argNum..")" -- Default String Value *************** *** 3297,3301 **** elseif not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "*("..argTypeWithAttrib.."*)wxlState.GetUserDataType("..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_Number, " --- 3321,3325 ---- elseif not numeric then overload_argList = overload_argList.."&s_wxluatag_"..MakeClassVar(argType)..", " ! argItem = "*("..argTypeWithAttrib.."*)wxluaT_getuserdatatype(L, "..argNum..", s_wxluatag_"..MakeClassVar(argType)..")" else overload_argList = overload_argList.."&s_wxluaarg_Number, " *************** *** 3542,3556 **** if parseObject["%encapsulate"] then ! table.insert(codeList, " wxlState.AddTrackedObject((long)returns, new wxLua_wxObject_"..MakeVar(parseObject.Name).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxlState.AddTrackedObject(returns);\n") end elseif not parseObject["%noclassinfo"] then CommentBindingTable(codeList, " // add to tracked window list, it will check validity\n") ! table.insert(codeList, " wxlState.AddTrackedWindow(returns);\n") end CommentBindingTable(codeList, " // push the constructed class pointer\n") ! table.insert(codeList, " wxlState.PushUserDataType(s_wxluatag_"..MakeClassVar(parseObject.Name)..", returns);\n") table.insert(codeList, "\n return 1;\n") --- 3566,3580 ---- 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 CommentBindingTable(codeList, " // add to tracked window list, it will check validity\n") ! table.insert(codeList, " wxluaW_addtrackedwindow(L, returns);\n") end CommentBindingTable(codeList, " // push the constructed class pointer\n") ! table.insert(codeList, " wxluaT_pushuserdatatype(L, s_wxluatag_"..MakeClassVar(parseObject.Name)..", returns);\n") table.insert(codeList, "\n return 1;\n") *************** *** 3565,3578 **** CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." * self = ("..parseObject.Name.." *)wxlState.GetUserDataType(1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList if parseObject["%ungc_this"] then ! table.insert(codeList, " wxlState.RemoveTrackedObject(self, wxLuaState::UNDELETE_OBJECT);\n") elseif parseObject["%gc_this"] then if parseObject["%encapsulate"] then ! table.insert(codeList, " if (!wxlState.IsTrackedObject(self)) wxlState.AddTrackedObject((long)self, new wxLua_wxObject_"..MakeClassVar(parseObject.Name).."(self));\n") else ! table.insert(codeList, " wxlState.AddTrackedObject(self);\n") end end --- 3589,3602 ---- CommentBindingTable(codeList, " // get this\n") ! table.insert(codeList, " "..parseObject.Name.." * self = ("..parseObject.Name.." *)wxluaT_getuserdatatype(L, 1, s_wxluatag_"..MakeClassVar(parseObject.Name)..");\n") overload_argList = "&s_wxluatag_"..MakeClassVar(parseObject.Name)..", "..overload_argList 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 *************** *** 3632,3638 **** if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " wxlState.AddTrackedObject((long)returns, new wxLua_wxObject_"..MakeVar(memberType).."(("..returnCast..")returns));\n") else ! table.insert(codeList, " wxlState.AddTrackedObject(("..returnCast..")returns);\n") end --- 3656,3662 ---- 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 *************** *** 3644,3653 **** if member.GC then if dataTypeTable[memberType]["%encapsulate"] then ! table.insert(codeList, " if (!wxlState.IsTrackedObject(returns)) wxlState.AddTrackedObject((long)returns, new wxLua_wxObject_"..MakeVar(memberType).."(returns));\n") else ! table.insert(codeList, " if (!wxlState.IsTrackedObject(returns)) wxlState.AddTrackedObject(returns);\n") end elseif member.UnGC then ! table.insert(codeList, " if (wxlState.IsTrackedObject(returns)) wxlState.RemoveTrackedObject(returns, wxLuaState::UNDELETE_OBJECT);\n") end --- 3668,3677 ---- 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 *************** *** 3659,3666 **** if memberType == "wxString" then CommentBindingTable(codeList, " // push the result string\n") ! table.insert(codeList, " wxlState.lua_PushString("..returnPtr.."returns);\n") elseif not numeric then CommentBindingTable(codeList, " // push the result datatype\n") ! table.insert(codeList, " wxlState.PushUserDataType(s_wxluatag_"..MakeClassVar(memberType)..", returns);\n") elseif (member.DataType == "BOOL") or (member.DataType == "bool") then CommentBindingTable(codeList, " // push the result flag\n") --- 3683,3690 ---- if memberType == "wxString" then CommentBindingTable(codeList, " // push the result string\n") ! table.insert(codeList, " wxlua_pushwxString(L, "..returnPtr.."returns);\n") elseif not numeric then CommentBindingTable(codeList, " // push the result datatype\n") ! table.insert(codeList, " wxluaT_pushuserdatatype(L, s_wxluatag_"..MakeClassVar(memberType)..", returns);\n") elseif (member.DataType == "BOOL") or (member.DataType == "bool") then CommentBindingTable(codeList, " // push the result flag\n") *************** *** 3697,3713 **** end ! -- remove the wxLuaState if we don't use it ! local needs_wxluastate = -1 ! for i = 1, #codeList do ! if string.find(codeList[i], "wxLuaState", 1, 1) then ! needs_wxluastate = i ! elseif string.find(codeList[i], "wxlState", 1, 1) then ! needs_wxluastate = -1 ! break ! end ! end ! if (needs_wxluastate > 0) then ! table.remove(codeList, needs_wxluastate) ! end methodcondition = FixCondition(methodcondition) --- 3721,3725 ---- end ! RemovewxLuaStateIfNotUsed(codeList) methodcondition = FixCondition(methodcondition) *************** *** 3818,3824 **** 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.." *)wxlState.GetUserDataType(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) && wxlState.RemoveTrackedObject(self, wxLuaState::DELETE_CLEAR_OBJECT))\n") table.insert(codeList, " {\n") table.insert(codeList, " lua_pushnil(L);\n") --- 3830,3836 ---- 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") *************** *** 3835,3838 **** --- 3847,3852 ---- local condition = FixCondition(parseObject.Condition) + RemovewxLuaStateIfNotUsed(codeList) + local delMethodBinding = { *************** *** 4568,4575 **** CommentBindingTable(codeList, "// Overloaded function for "..methodBindings[1].ClassName.."::"..methodBindings[1].LuaName.."\n") table.insert(codeList, "static int LUACALL "..funcName.."(lua_State *L)\n{\n") - table.insert(codeList, " wxLuaState wxlState(L);\n") table.insert(codeList, " static wxLuaBindMethod overload_method = \n") table.insert(codeList, " "..methodMap..";\n") ! table.insert(codeList, " return wxlState.CallOverloadedFunction(&overload_method);\n") table.insert(codeList, "}\n") --- 4582,4588 ---- CommentBindingTable(codeList, "// Overloaded function for "..methodBindings[1].ClassName.."::"..methodBindings[1].LuaName.."\n") table.insert(codeList, "static int LUACALL "..funcName.."(lua_State *L)\n{\n") table.insert(codeList, " static wxLuaBindMethod overload_method = \n") table.insert(codeList, " "..methodMap..";\n") ! table.insert(codeList, " return wxlua_CallOverloadedFunction(L, &overload_method);\n") table.insert(codeList, "}\n") |