Skip to content

Commit 05c7c93

Browse files
authored
Fix #7490 and #7494
Fix following issues: #7490 multiple grouped functions (member groups) #7494 grouped members from files ("user-defined")
1 parent b5fa3cd commit 05c7c93

File tree

1 file changed

+39
-21
lines changed

1 file changed

+39
-21
lines changed

src/perlmodgen.cpp

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,6 +1534,7 @@ class PerlModGenerator
15341534
inline PerlModGenerator(bool pretty) : m_output(pretty) { }
15351535

15361536
void generatePerlModForMember(const MemberDef *md, const Definition *);
1537+
void generatePerlUserDefinedSection(const Definition *d, const MemberGroupSDict *gsd);
15371538
void generatePerlModSection(const Definition *d, MemberList *ml,
15381539
const char *name, const char *header=0);
15391540
void addListOfAllMembers(const ClassDef *cd);
@@ -1776,6 +1777,38 @@ void PerlModGenerator::addListOfAllMembers(const ClassDef *cd)
17761777
m_output.closeList();
17771778
}
17781779

1780+
/* DGA: fix #7490 Perlmod generation issue with multiple grouped functions (member groups) */
1781+
void PerlModGenerator::generatePerlUserDefinedSection(const Definition *d, const MemberGroupSDict *gsd)
1782+
{
1783+
if (gsd)
1784+
{
1785+
MemberGroupSDict::Iterator mgli(*gsd);
1786+
MemberGroup *mg;
1787+
m_output.openList("user_defined");
1788+
for (; (mg = mgli.current()); ++mgli)
1789+
{
1790+
m_output.openHash();
1791+
if (mg->header())
1792+
m_output.addFieldQuotedString("header", mg->header());
1793+
1794+
if (mg->members())
1795+
{
1796+
m_output.openList("members");
1797+
MemberListIterator mli(*mg->members());
1798+
const MemberDef *md;
1799+
for (mli.toFirst(); (md = mli.current()); ++mli)
1800+
{
1801+
generatePerlModForMember(md, d);
1802+
}
1803+
m_output.closeList();
1804+
}
1805+
m_output.closeHash();
1806+
}
1807+
m_output.closeList();
1808+
}
1809+
}
1810+
/* DGA: end of fix #7490 */
1811+
17791812
void PerlModGenerator::generatePerlModForClass(const ClassDef *cd)
17801813
{
17811814
// + brief description
@@ -1862,13 +1895,7 @@ void PerlModGenerator::generatePerlModForClass(const ClassDef *cd)
18621895

18631896
addTemplateList(cd,m_output);
18641897
addListOfAllMembers(cd);
1865-
if (cd->getMemberGroupSDict())
1866-
{
1867-
MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
1868-
MemberGroup *mg;
1869-
for (;(mg=mgli.current());++mgli)
1870-
generatePerlModSection(cd,mg->members(),"user_defined",mg->header());
1871-
}
1898+
generatePerlUserDefinedSection(cd, cd->getMemberGroupSDict());
18721899

18731900
generatePerlModSection(cd,cd->getMemberList(MemberListType_pubTypes),"public_typedefs");
18741901
generatePerlModSection(cd,cd->getMemberList(MemberListType_pubMethods),"public_methods");
@@ -1968,13 +1995,7 @@ void PerlModGenerator::generatePerlModForNamespace(const NamespaceDef *nd)
19681995
m_output.closeList();
19691996
}
19701997

1971-
if (nd->getMemberGroupSDict())
1972-
{
1973-
MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict());
1974-
const MemberGroup *mg;
1975-
for (;(mg=mgli.current());++mgli)
1976-
generatePerlModSection(nd,mg->members(),"user-defined",mg->header());
1977-
}
1998+
generatePerlUserDefinedSection(nd, nd->getMemberGroupSDict());
19781999

19792000
generatePerlModSection(nd,nd->getMemberList(MemberListType_decDefineMembers),"defines");
19802001
generatePerlModSection(nd,nd->getMemberList(MemberListType_decProtoMembers),"prototypes");
@@ -2045,6 +2066,9 @@ void PerlModGenerator::generatePerlModForFile(const FileDef *fd)
20452066
}
20462067
m_output.closeList();
20472068

2069+
/* DGA: fix #7494 Perlmod does not generate grouped members from files */
2070+
generatePerlUserDefinedSection(fd, fd->getMemberGroupSDict());
2071+
20482072
generatePerlModSection(fd,fd->getMemberList(MemberListType_decDefineMembers),"defines");
20492073
generatePerlModSection(fd,fd->getMemberList(MemberListType_decProtoMembers),"prototypes");
20502074
generatePerlModSection(fd,fd->getMemberList(MemberListType_decTypedefMembers),"typedefs");
@@ -2143,13 +2167,7 @@ void PerlModGenerator::generatePerlModForGroup(const GroupDef *gd)
21432167
m_output.closeList();
21442168
}
21452169

2146-
if (gd->getMemberGroupSDict())
2147-
{
2148-
MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict());
2149-
MemberGroup *mg;
2150-
for (;(mg=mgli.current());++mgli)
2151-
generatePerlModSection(gd,mg->members(),"user-defined",mg->header());
2152-
}
2170+
generatePerlUserDefinedSection(gd, gd->getMemberGroupSDict());
21532171

21542172
generatePerlModSection(gd,gd->getMemberList(MemberListType_decDefineMembers),"defines");
21552173
generatePerlModSection(gd,gd->getMemberList(MemberListType_decProtoMembers),"prototypes");

0 commit comments

Comments
 (0)