parse unnamed unions

This commit is contained in:
Victor Bombi
2020-04-17 21:15:00 +02:00
parent 3e6ef21864
commit 95d494d91d
2 changed files with 8 additions and 16 deletions

View File

@@ -1019,6 +1019,12 @@ function M.Parser()
template_type = template_type:gsub("Ptr","%*")
end
for name in rest:gmatch("([^%s,;]+)%s?[,;]") do
--unnamed unions
local union_re = "^([^;{}]-union[^;{}]-%b{}[%s%w_%(%)]*;)"
if line:match(union_re) and name == "}" then
typen = typen..name
name = ""
end
local namebitfield,bitfield = name:match("([^:]+):(%d+)") --take care of bitfields
table.insert(outtab,{type=typen,template_type=template_type,name=namebitfield or name,bitfield=bitfield})
end

View File

@@ -484,23 +484,9 @@ set_defines(parser1.defsT)
save_data("./output/definitions.lua",serializeTableF(parser1.defsT))
----------save struct and enums lua table in structs_and_enums.lua for using in bindings
--TODO do union corrections not as exception
local structs_and_enums_table = parser1:gen_structs_and_enums_table()
--correct Pair union member if exists (until 1.71)
if structs_and_enums_table["structs"]["Pair"] then
structs_and_enums_table["structs"]["Pair"][2]["name"] = ""
structs_and_enums_table["structs"]["Pair"][2]["type"] = structs_and_enums_table["structs"]["Pair"][2]["type"] .. "}"
end
-- union in 1.72 and after
if structs_and_enums_table["structs"]["ImGuiStoragePair"] then
structs_and_enums_table["structs"]["ImGuiStoragePair"][2]["name"] = ""
structs_and_enums_table["structs"]["ImGuiStoragePair"][2]["type"] = structs_and_enums_table["structs"]["ImGuiStoragePair"][2]["type"] .. "}"
end
if structs_and_enums_table["structs"]["ImGuiStyleMod"] then
structs_and_enums_table["structs"]["ImGuiStyleMod"][2]["name"] = ""
structs_and_enums_table["structs"]["ImGuiStyleMod"][2]["type"] = structs_and_enums_table["structs"]["ImGuiStyleMod"][2]["type"] .. "}"
end
local structs_and_enums_table = parser1:gen_structs_and_enums_table()
-----------------------
save_data("./output/structs_and_enums.lua",serializeTableF(structs_and_enums_table))
save_data("./output/typedefs_dict.lua",serializeTableF(parser1.typedefs_dict))