From a898224cdcc04665c75ecd640dacf10efdff33ef Mon Sep 17 00:00:00 2001 From: Victor Bombi Date: Fri, 25 Sep 2020 13:51:59 +0200 Subject: [PATCH] cpp2ffi and generator: cleaning and add linenumber for imgui_impl_ files also --- generator/cpp2ffi.lua | 44 ++++++++++++++--------------------------- generator/generator.lua | 30 ++-------------------------- 2 files changed, 17 insertions(+), 57 deletions(-) diff --git a/generator/cpp2ffi.lua b/generator/cpp2ffi.lua index 4770f68..8826cad 100644 --- a/generator/cpp2ffi.lua +++ b/generator/cpp2ffi.lua @@ -297,7 +297,7 @@ local function isLeaf(re) end M.getRE = getRE --takes preprocesed file in table cdefsor and returns items -local function parseItems(txt,dumpit,loca,linenumdict) +local function parseItems(txt,linenumdict,dumpit) --assert(loca) --dumpit = true local res,resN = getRE() @@ -350,6 +350,7 @@ local function parseItems(txt,dumpit,loca,linenumdict) local comments = table.concat(outercomms,"\n") --..inercoms if comments=="" then comments=nil end outercomms = {} + local loca if linenumdict then local itemfirstline = itemold:match("[^\n]+") loca = linenumdict[itemfirstline] @@ -977,12 +978,12 @@ function M.Parser() end end --recursive item parsing - function par:parseItemsR2(txt,doprint,locat,linenumdict) - local itsarr,its = parseItems(txt,false,locat,linenumdict) + function par:parseItemsR2(txt) + local itsarr,its = parseItems(txt,self.linenumdict) for i,it in ipairs(itsarr) do if not isLeaf(it.re_name) then local inner = strip_end(it.item:match("%b{}"):sub(2,-2)) - it.childs = par:parseItemsR2(inner,doprint,locat,linenumdict) + it.childs = par:parseItemsR2(inner) for j,child in ipairs(it.childs) do child.parent = it end @@ -1003,32 +1004,17 @@ function M.Parser() end function par:parseItems() self:initTypedefsDict() - if self.separate_locations then - local all_itemsarr = {} - local located_cdefs = self:separate_locations(cdefs) - for i,lcdef in ipairs(located_cdefs) do - local txt = table.concat(lcdef[2],"\n") - local itemsarrT,itemsT = par:parseItemsR2(txt,false,lcdef[1]) - for i,it in ipairs(itemsarrT) do - table.insert(all_itemsarr,it) - end - end - - self.itemsarr = all_itemsarr - itemsarr = self.itemsarr - else - self.linenumdict = {} - local cdefs2 = {} - for i,cdef in ipairs(cdefs) do - self.linenumdict[cdef[1]]=cdef[2] - table.insert(cdefs2,cdef[1]) - end - local txt = table.concat(cdefs2,"\n") - - self.itemsarr = par:parseItemsR2(txt,false,nil,self.linenumdict) - itemsarr = self.itemsarr - + + self.linenumdict = {} + local cdefs2 = {} + for i,cdef in ipairs(cdefs) do + self.linenumdict[cdef[1]]=cdef[2] + table.insert(cdefs2,cdef[1]) end + local txt = table.concat(cdefs2,"\n") + + self.itemsarr = par:parseItemsR2(txt) + itemsarr = self.itemsarr end function par:printItems() diff --git a/generator/generator.lua b/generator/generator.lua index 2557851..66b5825 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -359,19 +359,6 @@ local function parseImGuiHeader(header,names) --prepare parser local parser = cpp2ffi.Parser() - parser.separate_locationsNO = function(self,cdefs) - local imguicdefs = {} - local othercdefs = {} - for i,cdef in ipairs(cdefs) do - if cdef[2]=="imgui" then - table.insert(imguicdefs,cdef[1]) - else - table.insert(othercdefs,cdef[1]) - end - end - return {{"imgui",imguicdefs},{"internal",othercdefs}} - end - parser.getCname = function(stname,funcname,namespace) local pre = (stname == "") and (namespace and (namespace=="ImGui" and "ig" or namespace.."_") or "ig") or stname.."_" return pre..funcname @@ -486,26 +473,13 @@ if #implementations > 0 then local iterator = cpp2ffi.location - for line,locat in iterator(pipe,{locati},{},COMPILER) do + for line,locat,linenum in iterator(pipe,{locati},{},COMPILER) do --local line, comment = split_comment(line) - parser2:insert(line,locat) + parser2:insert(line,tostring(locat)..":"..tostring(linenum)) end pipe:close() end - parser2.separate_locationsNO = function(self, cdefs) - local sepcdefs = {} - for i,impl in ipairs(implementations) do - sepcdefs[i] = {[[imgui_impl_]].. impl,{}} - for j,cdef in ipairs(cdefs) do - if cdef[2]==sepcdefs[i][1] then - table.insert(sepcdefs[i][2],cdef[1]) - end - end - end - return sepcdefs - end - parser2:do_parse() -- save ./cimgui_impl.h