generator.lua: add function to repair default values

This commit is contained in:
Victor Bombi
2020-09-24 12:32:36 +02:00
parent 6ee1d4c3fc
commit 59e6a69d88
2 changed files with 77 additions and 7 deletions

View File

@@ -178,6 +178,77 @@ local function DefsByStruct(FP)
FP.defsBystruct = structs
end
-- function for repairing funcdefs default values
local function repair_defaults(defsT,str_and_enu)
local enumsvalues = {}
for k,enu in pairs(str_and_enu.enums) do
for i,v in ipairs(enu) do
assert(v.calc_value)
enumsvalues[v.name] = v.calc_value
end
end
local function deleteOuterPars(def)
local w = def:match("^%b()$")
if w then
w = w:gsub("^%((.+)%)$","%1")
return w
else
return def
end
end
local function CleanImU32(def)
def = def:gsub("%(ImU32%)","")
--quitar () de numeros
def = def:gsub("%((%d+)%)","%1")
def = deleteOuterPars(def)
local bb=cpp2ffi.strsplit(def,"|")
for i=1,#bb do
local val = deleteOuterPars(bb[i])
if val:match"<<" then
local v1,v2 = val:match("(%d+)%s*<<%s*(%d+)")
val = v1*2^v2
bb[i] = val
end
assert(type(bb[i])=="number")
end
local res = 0
for i=1,#bb do res = res + bb[i] end
return res
end
for k,defT in pairs(defsT) do
for i,def in ipairs(defT) do
for k,v in pairs(def.defaults) do
--do only if not a c string
local is_cstring = v:sub(1,1)=='"' and v:sub(-1,-1) =='"'
if not is_cstring then
if v:match"::" then --could be nested enum
local enumname = v:gsub("[%w:]-::([%w]+)","%1")
local ok,val = pcall(cpp2ffi.parse_enum_value,enumname,enumsvalues)
if ok then
def.defaults[k] = val
else
print("deleting default ",v)
def.defaults[k] = nil
end
elseif enumsvalues[v] then
def.defaults[k] = enumsvalues[v]
else
local ok,val = pcall(cpp2ffi.parse_enum_value,v,enumsvalues,true)
if ok then
def.defaults[k] = val
else
def.defaults[k] = def.defaults[k]:gsub("%(%(void%s*%*%)0%)","NULL")
if def.defaults[k]:match"%(ImU32%)" then
def.defaults[k] = CleanImU32(def.defaults[k])
end
end
end
end
end
end
end
end
----------custom ImVector templates
local table_do_sorted = cpp2ffi.table_do_sorted
local function generate_templates(code,codeimpool,templates)
@@ -364,19 +435,17 @@ parser1:do_parse()
save_data("./output/overloads.txt",parser1.overloadstxt)
cimgui_generation(parser1)
----------save fundefs in definitions.lua for using in bindings
--DefsByStruct(pFP)
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
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))
----------save fundefs in definitions.lua for using in bindings
--DefsByStruct(pFP)
set_defines(parser1.defsT)
repair_defaults(parser1.defsT, structs_and_enums_table)
save_data("./output/definitions.lua",serializeTableF(parser1.defsT))
--check every function has ov_cimguiname
-- for k,v in pairs(parser1.defsT) do