@@ -1534,6 +1534,7 @@ class PerlModGenerator
1534
1534
inline PerlModGenerator (bool pretty) : m_output(pretty) { }
1535
1535
1536
1536
void generatePerlModForMember (const MemberDef *md, const Definition *);
1537
+ void generatePerlUserDefinedSection (const Definition *d, const MemberGroupSDict *gsd);
1537
1538
void generatePerlModSection (const Definition *d, MemberList *ml,
1538
1539
const char *name, const char *header=0 );
1539
1540
void addListOfAllMembers (const ClassDef *cd);
@@ -1776,6 +1777,38 @@ void PerlModGenerator::addListOfAllMembers(const ClassDef *cd)
1776
1777
m_output.closeList ();
1777
1778
}
1778
1779
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
+
1779
1812
void PerlModGenerator::generatePerlModForClass (const ClassDef *cd)
1780
1813
{
1781
1814
// + brief description
@@ -1862,13 +1895,7 @@ void PerlModGenerator::generatePerlModForClass(const ClassDef *cd)
1862
1895
1863
1896
addTemplateList (cd,m_output);
1864
1897
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 ());
1872
1899
1873
1900
generatePerlModSection (cd,cd->getMemberList (MemberListType_pubTypes)," public_typedefs" );
1874
1901
generatePerlModSection (cd,cd->getMemberList (MemberListType_pubMethods)," public_methods" );
@@ -1968,13 +1995,7 @@ void PerlModGenerator::generatePerlModForNamespace(const NamespaceDef *nd)
1968
1995
m_output.closeList ();
1969
1996
}
1970
1997
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 ());
1978
1999
1979
2000
generatePerlModSection (nd,nd->getMemberList (MemberListType_decDefineMembers)," defines" );
1980
2001
generatePerlModSection (nd,nd->getMemberList (MemberListType_decProtoMembers)," prototypes" );
@@ -2045,6 +2066,9 @@ void PerlModGenerator::generatePerlModForFile(const FileDef *fd)
2045
2066
}
2046
2067
m_output.closeList ();
2047
2068
2069
+ /* DGA: fix #7494 Perlmod does not generate grouped members from files */
2070
+ generatePerlUserDefinedSection (fd, fd->getMemberGroupSDict ());
2071
+
2048
2072
generatePerlModSection (fd,fd->getMemberList (MemberListType_decDefineMembers)," defines" );
2049
2073
generatePerlModSection (fd,fd->getMemberList (MemberListType_decProtoMembers)," prototypes" );
2050
2074
generatePerlModSection (fd,fd->getMemberList (MemberListType_decTypedefMembers)," typedefs" );
@@ -2143,13 +2167,7 @@ void PerlModGenerator::generatePerlModForGroup(const GroupDef *gd)
2143
2167
m_output.closeList ();
2144
2168
}
2145
2169
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 ());
2153
2171
2154
2172
generatePerlModSection (gd,gd->getMemberList (MemberListType_decDefineMembers)," defines" );
2155
2173
generatePerlModSection (gd,gd->getMemberList (MemberListType_decProtoMembers)," prototypes" );
0 commit comments