From 38bcc91220ec8c44a7c35c9d362bac28f40483ee Mon Sep 17 00:00:00 2001 From: Victor Bombi Date: Sat, 6 Jun 2020 11:36:56 +0200 Subject: [PATCH] non const ref to pointer --- generator/cimgui_template.cpp | 9 +----- generator/cimgui_template.h | 3 -- generator/cpp2ffi.lua | 61 +++++++++++++++++++++++++++++------ generator/generator.lua | 4 +-- 4 files changed, 55 insertions(+), 22 deletions(-) diff --git a/generator/cimgui_template.cpp b/generator/cimgui_template.cpp index 08af45c..4ea849e 100644 --- a/generator/cimgui_template.cpp +++ b/generator/cimgui_template.cpp @@ -31,14 +31,7 @@ CIMGUI_API float igGET_FLT_MAX() { return FLT_MAX; } -CIMGUI_API void igColorConvertRGBtoHSV(float r,float g,float b,float *out_h,float *out_s,float *out_v) -{ - ImGui::ColorConvertRGBtoHSV(r,g,b,*out_h,*out_s,*out_v); -} -CIMGUI_API void igColorConvertHSVtoRGB(float h,float s,float v,float *out_r,float *out_g,float *out_b) -{ - ImGui::ColorConvertHSVtoRGB(h,s,v,*out_r,*out_g,*out_b); -} + CIMGUI_API ImVector_ImWchar* ImVector_ImWchar_create() { diff --git a/generator/cimgui_template.h b/generator/cimgui_template.h index c1540ce..6d5e879 100644 --- a/generator/cimgui_template.h +++ b/generator/cimgui_template.h @@ -55,9 +55,6 @@ CIMGUI_API void igLogText(CONST char *fmt, ...); CIMGUI_API void ImGuiTextBuffer_appendf(struct ImGuiTextBuffer *buffer, const char *fmt, ...); //for getting FLT_MAX in bindings CIMGUI_API float igGET_FLT_MAX(); -//not const args from & to * -CIMGUI_API void igColorConvertRGBtoHSV(float r,float g,float b,float *out_h,float *out_s,float *out_v); -CIMGUI_API void igColorConvertHSVtoRGB(float h,float s,float v,float *out_r,float *out_g,float *out_b); CIMGUI_API ImVector_ImWchar* ImVector_ImWchar_create(); diff --git a/generator/cpp2ffi.lua b/generator/cpp2ffi.lua index 8e067d5..e5c29ec 100644 --- a/generator/cpp2ffi.lua +++ b/generator/cpp2ffi.lua @@ -482,16 +482,18 @@ local function parseFunction(self,stname,lineorig,namespace,locat) local functype_arg_rest = "^(%s*[%w%s%*]+%(%*[%w_]+%)%([^%(%)]*%)),*(.*)" local rest = argscsinpars:sub(2,-2) --strip () + while true do --local tt = strsplit(rest,",") --for ii,arg in ipairs(tt) do --for arg in argscsinpars:gmatch("[%(,]*([^,%(%)]+)[%),]") do + local reftoptr if rest == "void" then break end local type,name,retf,sigf local arg,restt = rest:match(functype_arg_rest) - if arg then + if arg then -- if is function pointer local t1,namef,t2 = arg:match(functype_reex) - type=t1.."(*)"..t2;name=namef + type = t1.."(*)"..t2;name=namef retf = t1 sigf = t2 rest = restt @@ -499,8 +501,13 @@ local function parseFunction(self,stname,lineorig,namespace,locat) arg,restt = rest:match(",*([^,%(%)]+),*(.*)") if not arg then break end rest = restt - if arg:match("&") and arg:match("const") then - arg = arg:gsub("&","") + if arg:match("&") then + if arg:match("const") then + arg = arg:gsub("&","") + else + arg = arg:gsub("&","*") + reftoptr = true + end end if arg:match("%.%.%.") then type="...";name="..." @@ -510,7 +517,6 @@ local function parseFunction(self,stname,lineorig,namespace,locat) if not type or not name then print("failure arg detection",funcname,type,name,argscsinpars,arg) - else if name:match"%*" then print("**",funcname) end --float name[2] to float[2] name @@ -521,7 +527,7 @@ local function parseFunction(self,stname,lineorig,namespace,locat) end end end - table.insert(argsArr,{type=type,name=name,ret=retf,signature=sigf}) + table.insert(argsArr,{type=type,name=name,ret=retf,signature=sigf,reftoptr=reftoptr}) if arg:match("&") and not arg:match("const") then --only post error if not manual local cname = self.getCname(stname,funcname, namespace) --cimguiname @@ -531,7 +537,7 @@ local function parseFunction(self,stname,lineorig,namespace,locat) end end argscsinpars = argscsinpars:gsub("&","") - + local signature = argscsinpars:gsub("([%w%s%*_]+)%s[%w_]+%s*([,%)])","%1%2") signature = signature:gsub("%s*([,%)])","%1") --space before , and ) signature = signature:gsub(",%s*",",")--space after , @@ -542,6 +548,43 @@ local function parseFunction(self,stname,lineorig,namespace,locat) local call_args = argscsinpars:gsub("([%w_]+%s[%w_]+)%[%d*%]","%1") --float[2] call_args = call_args:gsub("%(%*([%w_]+)%)%([^%(%)]*%)"," %1") --func type call_args = call_args:gsub("[^%(].-([%w_]+)%s*([,%)])","%1%2") + + --recreate argscsinpars from argsArr + local asp, caar + if #argsArr > 0 then + asp = "(" + caar = "(" + for i,v in ipairs(argsArr) do + if v.ret then --function pointer + asp = asp .. v.ret .. "(*" .. v.name .. ")" .. v.signature .. "," + caar = caar .. v.name .. "," + else + local siz = v.type:match("(%[%d*%])") or "" + local type = v.type:gsub("(%[%d*%])","") + asp = asp .. type .. (v.name~="..." and " "..v.name or "") .. siz .. "," + local callname = v.reftoptr and "*"..v.name or v.name + caar = caar .. callname .. "," + end + end + asp = asp:sub(1,-2)..")" + caar = caar:sub(1,-2)..")" + else + asp = "()" + caar = "()" + end + --[[ + if asp~=argscsinpars then + print("bad recontruction",funcname) + print(argscsinpars) + print(asp) + end + if caar~=call_args then + print("bad call_args",funcname) + print(call_args) + print(caar) + end + --]] + ------------------------------ if not ret and stname then --must be constructors if not (stname == funcname or "~"..stname==funcname) then --break end @@ -569,9 +612,9 @@ local function parseFunction(self,stname,lineorig,namespace,locat) defT.stname = stname defT.funcname = funcname defT.argsoriginal = args - defT.args=argscsinpars + defT.args= asp --argscsinpars defT.signature = signature - defT.call_args = call_args + defT.call_args = caar --call_args defT.isvararg = signature:match("%.%.%.%)$") defT.location = locat --defT.comment = "" --comment diff --git a/generator/generator.lua b/generator/generator.lua index c3b3ec3..dfcea69 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -50,8 +50,8 @@ for i=3,#script_args do table.insert(implementations,script_args[i]) end local cimgui_manuals = { igLogText = true, ImGuiTextBuffer_appendf = true, - igColorConvertRGBtoHSV = true, - igColorConvertHSVtoRGB = true + --igColorConvertRGBtoHSV = true, + --igColorConvertHSVtoRGB = true } -------------------------------------------------------------------------- --this table is a dictionary to force a naming of function overloading (instead of algorythmic generated)