From: John L. <jr...@us...> - 2007-03-15 14:20:24
|
Update of /cvsroot/wxlua/wxLua/bindings In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv4462/bindings Modified Files: genwxbind.lua Log Message: remove duplicate entries in .i files start to sort the binding items in the structs alphabetically Index: genwxbind.lua =================================================================== RCS file: /cvsroot/wxlua/wxLua/bindings/genwxbind.lua,v retrieving revision 1.106 retrieving revision 1.107 diff -C2 -d -r1.106 -r1.107 *** genwxbind.lua 15 Mar 2007 00:01:09 -0000 1.106 --- genwxbind.lua 15 Mar 2007 14:20:13 -0000 1.107 *************** *** 36,48 **** enumBindingTable = {} -- table[#if condition][enum name] = { Map, Condition } defineBindingTable = {} -- table[#if condition][define name] = { Map, Condition } - defineIncludeBindingTable = {} -- table[#if condition][define name] = { Map, Condition } stringBindingTable = {} -- table[#if condition][string name] = { Map, Condition } objectBindingTable = {} -- table[#if condition][object name] = { Map, Condition } - objectTagBindingTable = {} - objectIncludeBindingTable = {} pointerBindingTable = {} eventBindingTable = {} - eventTagBindingTable = {} - eventIncludeBindingTable = {} functionBindingTable = {} classBindingTable = {} --- 36,43 ---- *************** *** 109,112 **** --- 104,119 ---- -- --------------------------------------------------------------------------- + -- Sort the table and return it as an numerically indexed table array + -- --------------------------------------------------------------------------- + function TableSort(atable, comp_func) + local a = {} + for k, v in pairs(atable) do table.insert(a, k) end + table.sort(a, comp_func) + local b = {} + for n = 1, #a do table.insert(b, atable[a[n]]) end + return b + end + + -- --------------------------------------------------------------------------- -- Completely dump the contents of a table -- atable is the input table to dump the contents of *************** *** 598,601 **** --- 605,619 ---- -- --------------------------------------------------------------------------- + -- Fix the condition to be uniform, "1" means none + -- --------------------------------------------------------------------------- + function FixCondition(condition) + if not HasCondition(condition) then + return "1" + end + + return condition + end + + -- --------------------------------------------------------------------------- -- Build condition string using condition stack (number indexed lua table) -- --------------------------------------------------------------------------- *************** *** 2606,2610 **** -- end ! local includecondition = parseObject.Condition or "1" local includeBinding = { --- 2624,2628 ---- -- end ! local includecondition = FixCondition(parseObject.Condition) local includeBinding = { *************** *** 2629,2633 **** -- encapsulate non-wxObject objects with a tracked wxObject if parseObject.Encapsulate then ! local encapcondition = parseObject.Condition or "1" local encapsulationBinding = { --- 2647,2651 ---- -- encapsulate non-wxObject objects with a tracked wxObject if parseObject.Encapsulate then ! local encapcondition = FixCondition(parseObject.Condition) local encapsulationBinding = { *************** *** 2645,2649 **** local member = parseObject.Members[m] ! local fullcondition = AddCondition(member.Condition, member.ExtraCondition) or "1" -- /////////////////////////////////////////////////////////////// --- 2663,2667 ---- local member = parseObject.Members[m] ! local fullcondition = FixCondition(AddCondition(member.Condition, member.ExtraCondition)) -- /////////////////////////////////////////////////////////////// *************** *** 2676,2680 **** propertycondition = AddCondition(propertycondition, condition) end ! if not propertycondition then propertycondition = "1" end -- read property --- 2694,2698 ---- propertycondition = AddCondition(propertycondition, condition) end ! propertycondition = FixCondition(propertycondition) -- read property *************** *** 2682,2685 **** --- 2700,2704 ---- local propertyBinding = { + Name = member.Name, Map = " { LuaGetProp, \""..member.Name.."\", wxLua_"..MakeVar(parseObject.Name).."_Get"..member.Name..", 0, 0, s_wxluaargArray_None },\n", Condition = propertycondition *************** *** 2694,2697 **** --- 2713,2717 ---- local propertyBinding = { + Name = member.Name, Map = " { LuaSetProp, \""..member.Name.."\", wxLua_"..MakeVar(parseObject.Name).."_Set"..member.Name..", 1, 1, s_wxluaargArray_None },\n", Condition = propertycondition *************** *** 2734,2738 **** membercondition = AddCondition(membercondition, condition) end ! if not membercondition then membercondition = "1" end -- GET MEMBER CODE --- 2754,2758 ---- membercondition = AddCondition(membercondition, condition) end ! membercondition = FixCondition(membercondition) -- GET MEMBER CODE *************** *** 2865,2869 **** table.insert(interface.objectData[o].BindTable[membercondition], propertyBinding) ! -- ////////////////////////////////////////////////////////////////////////////////// -- enum binding elseif member.DefType == "enum" then --- 2885,2889 ---- table.insert(interface.objectData[o].BindTable[membercondition], propertyBinding) ! -- /////////////////////////////////////////////////////////////// -- enum binding elseif member.DefType == "enum" then *************** *** 2891,2902 **** local enumBinding = { Map = " { \""..luaname.."\", "..namespace..member.Name.." },\n", Condition = fullcondition } ! if not enumBindingTable[fullcondition] then enumBindingTable[fullcondition] = {} end ! enumBindingTable[fullcondition][member.Name] = enumBinding ! -- ////////////////////////////////////////////////////////////////////////////////// -- define binding elseif member.DefType == "define" then --- 2911,2928 ---- local enumBinding = { + Name = luaname, Map = " { \""..luaname.."\", "..namespace..member.Name.." },\n", Condition = fullcondition } ! if enumBindingTable[member.Name] then ! print("Warning: '"..member.Name.."' already has an %enum binding!") ! print(TableDump(enumBindingTable[member.Name], "Old: ")) ! print(TableDump(enumBinding, "New: ")) ! end ! enumBindingTable[luaname] = enumBinding -- overwrite it anyway ! ! -- /////////////////////////////////////////////////////////////// -- define binding elseif member.DefType == "define" then *************** *** 2904,2944 **** local defineBinding = { Map = " { \""..member.Name.."\", "..value.." },\n", Condition = fullcondition } ! if not defineBindingTable[fullcondition] then defineBindingTable[fullcondition] = {} end ! defineBindingTable[fullcondition][member.Name] = defineBinding ! ! -- Define Includes ! for condition, includeBindingList in pairs(interface.includeBindingTable) do ! if not defineIncludeBindingTable[condition] then defineIncludeBindingTable[condition] = {} end ! ! for idx, includeBinding in pairs(includeBindingList) do ! defineIncludeBindingTable[condition][idx] = includeBinding ! end end ! -- ////////////////////////////////////////////////////////////////////////////////// -- define string binding elseif member.DefType == "define_string" then local value = member.Value or member.Name ! local definestringBinding = { Map = " { \""..member.Name.."\", "..value.." },\n", Condition = fullcondition } ! if not stringBindingTable[fullcondition] then stringBindingTable[fullcondition] = {} end ! stringBindingTable[fullcondition][member.Name] = definestringBinding ! ! -- Define Includes ! for condition, includeBindingList in pairs(interface.includeBindingTable) do ! if not defineIncludeBindingTable[condition] then defineIncludeBindingTable[condition] = {} end ! ! for idx, includeBinding in pairs(includeBindingList) do ! defineIncludeBindingTable[condition][idx] = includeBinding ! end end -- ////////////////////////////////////////////////////////////////////////////////// --- 2930,2962 ---- local defineBinding = { + Name = member.Name, Map = " { \""..member.Name.."\", "..value.." },\n", Condition = fullcondition } ! if defineBindingTable[member.Name] then ! print("Warning: '"..member.Name.."' already has a %define binding!") ! print(TableDump(defineBindingTable[member.Name], "Old: ")) ! print(TableDump(defineBinding, "New: ")) end + defineBindingTable[member.Name] = defineBinding ! -- /////////////////////////////////////////////////////////////// -- define string binding elseif member.DefType == "define_string" then local value = member.Value or member.Name ! local stringBinding = { + Name = member.Name, Map = " { \""..member.Name.."\", "..value.." },\n", Condition = fullcondition } ! if stringBindingTable[member.Name] then ! print("Warning: '"..member.Name.."' already has a %define %string binding!") ! print(TableDump(stringBindingTable[member.Name], "Old: ")) ! print(TableDump(stringBinding, "New: ")) end + stringBindingTable[member.Name] = stringBinding -- ////////////////////////////////////////////////////////////////////////////////// *************** *** 2948,2976 **** local objectBinding = { Map = " { \""..luaname.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name)..", &"..member.Name..", 0 },\n", Condition = fullcondition } ! if not objectBindingTable[fullcondition] then objectBindingTable[fullcondition] = {} end ! objectBindingTable[fullcondition][member.Name] = objectBinding ! ! -- Object Class Tag Binding ! local objectTagBinding = ! { ! ExternDeclaration = "extern "..MakeImpExpData("int").." s_wxluatag_"..MakeClassVar(parseObject.Name)..";\n", ! Condition = fullcondition ! } ! ! if not objectTagBindingTable[fullcondition] then objectTagBindingTable[fullcondition] = {} end ! objectTagBindingTable[fullcondition][parseObject.Name] = objectTagBinding ! ! -- Object Includes ! for condition, includeBindingList in pairs(interface.includeBindingTable) do ! if not objectIncludeBindingTable[condition] then objectIncludeBindingTable[condition] = {} end ! ! for idx, includeBinding in pairs(includeBindingList) do ! objectIncludeBindingTable[condition][idx] = includeBinding ! end end -- ////////////////////////////////////////////////////////////////////////////////// --- 2966,2980 ---- local objectBinding = { + Name = luaname, Map = " { \""..luaname.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name)..", &"..member.Name..", 0 },\n", Condition = fullcondition } ! if objectBindingTable[luaname] then ! print("Warning: '"..luaname.."' already has a %define %object binding!") ! print(TableDump(objectBindingTable[luaname], "Old: ")) ! print(TableDump(objectBinding, "New: ")) end + objectBindingTable[luaname] = objectBinding -- ////////////////////////////////////////////////////////////////////////////////// *************** *** 2980,3008 **** local pointerBinding = { Map = " { \""..luaname.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name)..", 0, (const void **) &"..member.Name.." },\n", Condition = fullcondition } ! if not pointerBindingTable[fullcondition] then pointerBindingTable[fullcondition] = {} end ! pointerBindingTable[fullcondition][member.Name] = pointerBinding ! ! -- Object Class Tag Binding ! local objectTagBinding = ! { ! ExternDeclaration = "extern "..MakeImpExpData("int").." s_wxluatag_"..MakeClassVar(parseObject.Name)..";\n", ! Condition = fullcondition ! } ! ! if not objectTagBindingTable[fullcondition] then objectTagBindingTable[fullcondition] = {} end ! objectTagBindingTable[fullcondition][parseObject.Name] = objectTagBinding ! ! -- Object Includes ! for condition, includeBindingList in pairs(interface.includeBindingTable) do ! if not objectIncludeBindingTable[condition] then objectIncludeBindingTable[condition] = {} end ! ! for idx, includeBinding in pairs(includeBindingList) do ! objectIncludeBindingTable[condition][idx] = includeBinding ! end end -- ////////////////////////////////////////////////////////////////////////////////// --- 2984,2998 ---- local pointerBinding = { + Name = luaname, Map = " { \""..luaname.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name)..", 0, (const void **) &"..member.Name.." },\n", Condition = fullcondition } ! if pointerBindingTable[luaname] then ! print("Warning: '"..luaname.."' already has a %define %pointer binding!") ! print(TableDump(pointerBindingTable[luaname], "Old: ")) ! print(TableDump(pointerBinding, "New: ")) end + pointerBindingTable[luaname] = pointerBinding -- ////////////////////////////////////////////////////////////////////////////////// *************** *** 3011,3039 **** local eventBinding = { Map = " { &"..member.Name..", \""..member.Name.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name).." },\n", Condition = fullcondition } ! if not eventBindingTable[fullcondition] then eventBindingTable[fullcondition] = {} end ! eventBindingTable[fullcondition][member.Name] = eventBinding ! ! -- Event Class Tag Binding ! local eventTagBinding = ! { ! ExternDeclaration = "extern "..MakeImpExpData("int").." s_wxluatag_"..MakeClassVar(parseObject.Name)..";\n", ! Condition = fullcondition ! } ! ! if not eventTagBindingTable[fullcondition] then eventTagBindingTable[fullcondition] = {} end ! eventTagBindingTable[fullcondition][parseObject.Name] = eventTagBinding ! ! -- Event Includes ! for condition, includeBindingList in pairs(interface.includeBindingTable) do ! if not eventIncludeBindingTable[condition] then eventIncludeBindingTable[condition] = {} end ! ! for idx, includeBinding in pairs(includeBindingList) do ! eventIncludeBindingTable[condition][idx] = includeBinding ! end end -- ////////////////////////////////////////////////////////////////////////////////// --- 3001,3015 ---- local eventBinding = { + Name = member.Name, Map = " { &"..member.Name..", \""..member.Name.."\", &s_wxluatag_"..MakeClassVar(parseObject.Name).." },\n", Condition = fullcondition } ! if eventBindingTable[member.Name] then ! print("Warning: '"..member.Name.."' already has a %define %event binding!") ! print(TableDump(eventBindingTable[member.Name], "Old: ")) ! print(TableDump(eventBinding, "New: ")) end + eventBindingTable[member.Name] = eventBinding -- ////////////////////////////////////////////////////////////////////////////////// *************** *** 3611,3615 **** methodcondition = AddCondition(methodcondition, condition) end ! if not methodcondition then methodcondition = "1" end -- bind method --- 3587,3592 ---- methodcondition = AddCondition(methodcondition, condition) end ! ! methodcondition = FixCondition(methodcondition) -- bind method *************** *** 3680,3684 **** -- Extern Class Tag Declaration ! local tagcondition = parseObject.Condition or "1" local classTagBinding = { --- 3657,3661 ---- -- Extern Class Tag Declaration ! local tagcondition = FixCondition(parseObject.Condition) local classTagBinding = { *************** *** 3712,3717 **** end - local gcFunctionName = "NULL" - -- Class Functions if parseObject.DeleteRequired then --- 3689,3692 ---- *************** *** 3731,3735 **** table.insert(codeList, "}\n\n") ! local condition = parseObject.Condition or "1" local delMethodBinding = { --- 3706,3710 ---- table.insert(codeList, "}\n\n") ! local condition = FixCondition(parseObject.Condition) local delMethodBinding = { *************** *** 3743,3747 **** end ! local classcondition = parseObject.Condition or "1" local classBinding = { --- 3718,3722 ---- end ! local classcondition = FixCondition(parseObject.Condition) local classBinding = { *************** *** 4140,4179 **** table.insert(fileData, " // -------------------------------------------------------------------\n") ! table.insert(fileData, " // %define\n") table.insert(fileData, " // -------------------------------------------------------------------\n\n") ! for condition, defineBindingList in pairs_sort(defineBindingTable) do ! if HasCondition(condition) then ! table.insert(fileData, "#if "..condition.."\n") ! end ! ! for idx, defineBinding in pairs_sort(defineBindingList) do ! table.insert(fileData, defineBinding.Map) end - if HasCondition(condition) then - table.insert(fileData, "#endif // "..condition.."\n\n") - else - table.insert(fileData, "\n") end end ! table.insert(fileData, " // -------------------------------------------------------------------\n") ! table.insert(fileData, " // %enum\n") ! table.insert(fileData, " // -------------------------------------------------------------------\n\n") ! for condition, enumBindingList in pairs_sort(enumBindingTable) do ! if HasCondition(condition) then ! table.insert(fileData, "#if "..condition.."\n") end ! for idx, enumBinding in pairs_sort(enumBindingList) do ! table.insert(fileData, enumBinding.Map) ! end ! if HasCondition(condition) then ! table.insert(fileData, "#endif // "..condition.."\n\n") ! else ! table.insert(fileData, "\n") end end --- 4115,4153 ---- table.insert(fileData, " // -------------------------------------------------------------------\n") ! table.insert(fileData, " // %define and %enum\n") table.insert(fileData, " // -------------------------------------------------------------------\n\n") ! -- mix the %define and %enums together since they're both in the same WXLUADEFINE struct ! local defineEnumBindingTable = {} ! for k, v in pairs(defineBindingTable) do ! if (defineEnumBindingTable[k]) then ! print("ERROR: Duplicate WXLUADEFINE entries!") ! print(" '"..k.."' = '"..defineEnumBindingTable[k].Map.."' and '"..v.Map.."'") end + defineEnumBindingTable[k] = v + end + for k, v in pairs(enumBindingTable) do + if (defineEnumBindingTable[k]) then + print("ERROR: Duplicate WXLUADEFINE entries!") + print(" '"..k.."' = '"..defineEnumBindingTable[k].Map.."' and '"..v.Map.."'") end + defineEnumBindingTable[k] = v end ! -- sort the bindings by class name and write them out alphabetically ! local sortedBindings = TableSort(defineEnumBindingTable) ! for n = 1, #sortedBindings do ! local condition = sortedBindings[n].Condition ! -- try to combine the #if statements if possible ! if HasCondition(condition) and ((n == 1) or (condition ~= sortedBindings[n-1].Condition)) then ! table.insert(fileData, "\n#if "..condition.."\n") end ! table.insert(fileData, sortedBindings[n].Map) ! if HasCondition(condition) and ((n >= #sortedBindings) or (condition ~= sortedBindings[n+1].Condition)) then ! table.insert(fileData, "#endif // "..condition.."\n") end end *************** *** 4199,4215 **** table.insert(fileData, " // -------------------------------------------------------------------\n\n") ! for condition, stringBindingList in pairs_sort(stringBindingTable) do ! if HasCondition(condition) then ! table.insert(fileData, "#if "..condition.."\n") ! end ! for idx, stringBinding in pairs_sort(stringBindingList) do ! table.insert(fileData, stringBinding.Map) end ! if HasCondition(condition) then ! table.insert(fileData, "#endif // "..condition.."\n\n") ! else ! table.insert(fileData, "\n") end end --- 4173,4190 ---- table.insert(fileData, " // -------------------------------------------------------------------\n\n") ! -- sort the bindings by class name and write them out alphabetically ! local sortedBindings = TableSort(stringBindingTable) ! for n = 1, #sortedBindings do ! local condition = sortedBindings[n].Condition ! -- try to combine the #if statements if possible ! if HasCondition(condition) and ((n == 1) or (condition ~= sortedBindings[n-1].Condition)) then ! table.insert(fileData, "\n#if "..condition.."\n") end ! table.insert(fileData, sortedBindings[n].Map) ! ! if HasCondition(condition) and ((n >= #sortedBindings) or (condition ~= sortedBindings[n+1].Condition)) then ! table.insert(fileData, "#endif // "..condition.."\n") end end *************** *** 4240,4272 **** table.insert(fileData, " static WXLUAOBJECT objectList[] =\n {\n") ! for condition, objectBindingList in pairs_sort(objectBindingTable) do ! if HasCondition(condition) then ! table.insert(fileData, "\n#if "..condition.."\n") ! end ! ! for idx, objectBinding in pairs_sort(objectBindingList) do ! table.insert(fileData, objectBinding.Map) end - if HasCondition(condition) then - table.insert(fileData, "#endif // "..condition.."\n") - else - table.insert(fileData, "\n") end end ! for condition, pointerBindingList in pairs_sort(pointerBindingTable) do ! if HasCondition(condition) then table.insert(fileData, "\n#if "..condition.."\n") end ! for idx, pointerBinding in pairs_sort(pointerBindingList) do ! table.insert(fileData, pointerBinding.Map) ! end ! if HasCondition(condition) then table.insert(fileData, "#endif // "..condition.."\n") - else - table.insert(fileData, "\n") end end --- 4215,4250 ---- table.insert(fileData, " static WXLUAOBJECT objectList[] =\n {\n") ! -- mix %object and %pointer together since they're both in the same WXLUAOBJECT struct ! local objectPointerBindingTable = {} ! for k, v in pairs(objectBindingTable) do ! if (objectPointerBindingTable[k]) then ! print("ERROR: Duplicate WXLUAOBJECT entries!") ! print(" '"..k.."' = '"..objectPointerBindingTable[k].Map.."' and '"..v.Map.."'") end + objectPointerBindingTable[k] = v + end + for k, v in pairs(pointerBindingTable) do + if (objectPointerBindingTable[k]) then + print("ERROR: Duplicate WXLUAOBJECT entries!") + print(" '"..k.."' = '"..objectPointerBindingTable[k].Map.."' and '"..v.Map.."'") end + objectPointerBindingTable[k] = v end ! -- sort the bindings by class name and write them out alphabetically ! local sortedBindings = TableSort(objectPointerBindingTable) ! ! for n = 1, #sortedBindings do ! local condition = sortedBindings[n].Condition ! -- try to combine the #if statements if possible ! if HasCondition(condition) and ((n == 1) or (condition ~= sortedBindings[n-1].Condition)) then table.insert(fileData, "\n#if "..condition.."\n") end ! table.insert(fileData, sortedBindings[n].Map) ! if HasCondition(condition) and ((n >= #sortedBindings) or (condition ~= sortedBindings[n+1].Condition)) then table.insert(fileData, "#endif // "..condition.."\n") end end *************** *** 4297,4313 **** table.insert(fileData, " static WXLUAEVENT eventList[] =\n {\n") ! for condition, eventBindingList in pairs_sort(eventBindingTable) do ! if HasCondition(condition) then ! table.insert(fileData, "#if "..condition.."\n") ! end ! for idx, eventBinding in pairs_sort(eventBindingList) do ! table.insert(fileData, eventBinding.Map) end ! if HasCondition(condition) then ! table.insert(fileData, "#endif // "..condition.."\n\n") ! else ! table.insert(fileData, "\n") end end --- 4275,4292 ---- table.insert(fileData, " static WXLUAEVENT eventList[] =\n {\n") ! -- sort the bindings by class name and write them out alphabetically ! local sortedBindings = TableSort(eventBindingTable) ! for n = 1, #sortedBindings do ! local condition = sortedBindings[n].Condition ! -- try to combine the #if statements if possible ! if HasCondition(condition) and ((n == 1) or (condition ~= sortedBindings[n-1].Condition)) then ! table.insert(fileData, "\n#if "..condition.."\n") end ! table.insert(fileData, sortedBindings[n].Map) ! ! if HasCondition(condition) and ((n >= #sortedBindings) or (condition ~= sortedBindings[n+1].Condition)) then ! table.insert(fileData, "#endif // "..condition.."\n") end end |