Skip to content

Commit fb8dfdf

Browse files
authored
Merge pull request doxygen#11357 from gwllx/fix/define-in-scoped-enum-values
Remove macro defines from C++ scoped enum values
2 parents ac76d8c + ade0763 commit fb8dfdf

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

src/doxygen.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7751,6 +7751,7 @@ static void addEnumValuesToEnums(const Entry *root)
77517751
bool isJavaLike = sle==SrcLangExt::CSharp || sle==SrcLangExt::Java || sle==SrcLangExt::XML;
77527752
if ( isJavaLike || root->spec.isStrong())
77537753
{
7754+
if (sle == SrcLangExt::Cpp && e->section.isDefine()) continue;
77547755
// Unlike classic C/C++ enums, for C++11, C# & Java enum
77557756
// values are only visible inside the enum scope, so we must create
77567757
// them here and only add them to the enum
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="" xml:lang="en-US">
3+
<compounddef id="107__define__in__enums_8cpp" kind="file" language="C++">
4+
<compoundname>107_define_in_enums.cpp</compoundname>
5+
<sectiondef kind="define">
6+
<memberdef kind="define" id="107__define__in__enums_8cpp_1af5306e4b64f0a20303086d3936c64e0c" prot="public" static="no">
7+
<name>ID_A</name>
8+
<param>
9+
<defname>X</defname>
10+
</param>
11+
<initializer>X,</initializer>
12+
<briefdescription>
13+
</briefdescription>
14+
<detaileddescription>
15+
</detaileddescription>
16+
<inbodydescription>
17+
</inbodydescription>
18+
<location file="107_define_in_enums.cpp" line="7" column="9" bodyfile="107_define_in_enums.cpp" bodystart="7" bodyend="-1"/>
19+
</memberdef>
20+
<memberdef kind="define" id="107__define__in__enums_8cpp_1a244e85f8f6926f9cb8e576ad9c797f47" prot="public" static="no">
21+
<name>ID_B</name>
22+
<param>
23+
<defname>X</defname>
24+
</param>
25+
<initializer>X,</initializer>
26+
<briefdescription>
27+
</briefdescription>
28+
<detaileddescription>
29+
</detaileddescription>
30+
<inbodydescription>
31+
</inbodydescription>
32+
<location file="107_define_in_enums.cpp" line="13" column="9" bodyfile="107_define_in_enums.cpp" bodystart="13" bodyend="-1"/>
33+
</memberdef>
34+
</sectiondef>
35+
<sectiondef kind="enum">
36+
<memberdef kind="enum" id="107__define__in__enums_8cpp_1a3b98e2dffc6cb06a89dcb0d5c60a0206" prot="public" static="no" strong="no">
37+
<type/>
38+
<name>A</name>
39+
<enumvalue id="107__define__in__enums_8cpp_1a3b98e2dffc6cb06a89dcb0d5c60a0206a6ff26890857c886c86453f0c8078bf95" prot="public">
40+
<name>A1</name>
41+
<briefdescription>
42+
</briefdescription>
43+
<detaileddescription>
44+
</detaileddescription>
45+
</enumvalue>
46+
<enumvalue id="107__define__in__enums_8cpp_1a3b98e2dffc6cb06a89dcb0d5c60a0206a47329f455692c2a8284d7594405f16d4" prot="public">
47+
<name>A2</name>
48+
<briefdescription>
49+
</briefdescription>
50+
<detaileddescription>
51+
</detaileddescription>
52+
</enumvalue>
53+
<briefdescription>
54+
</briefdescription>
55+
<detaileddescription>
56+
</detaileddescription>
57+
<inbodydescription>
58+
</inbodydescription>
59+
<location file="107_define_in_enums.cpp" line="6" column="1" bodyfile="107_define_in_enums.cpp" bodystart="6" bodyend="10"/>
60+
</memberdef>
61+
<memberdef kind="enum" id="107__define__in__enums_8cpp_1a9d3d9048db16a7eee539e93e3618cbe7" prot="public" static="no" strong="yes">
62+
<type/>
63+
<name>B</name>
64+
<enumvalue id="107__define__in__enums_8cpp_1a9d3d9048db16a7eee539e93e3618cbe7ac9512565ef6194ca664dc41ec0de7a53" prot="public">
65+
<name>B1</name>
66+
<briefdescription>
67+
</briefdescription>
68+
<detaileddescription>
69+
</detaileddescription>
70+
</enumvalue>
71+
<enumvalue id="107__define__in__enums_8cpp_1a9d3d9048db16a7eee539e93e3618cbe7abbd97b00c539801e32317ab550867ec4" prot="public">
72+
<name>B2</name>
73+
<briefdescription>
74+
</briefdescription>
75+
<detaileddescription>
76+
</detaileddescription>
77+
</enumvalue>
78+
<briefdescription>
79+
</briefdescription>
80+
<detaileddescription>
81+
</detaileddescription>
82+
<inbodydescription>
83+
</inbodydescription>
84+
<location file="107_define_in_enums.cpp" line="12" column="1" bodyfile="107_define_in_enums.cpp" bodystart="12" bodyend="16"/>
85+
</memberdef>
86+
</sectiondef>
87+
<briefdescription>
88+
</briefdescription>
89+
<detaileddescription>
90+
</detaileddescription>
91+
<location file="107_define_in_enums.cpp"/>
92+
</compounddef>
93+
</doxygen>

testing/107_define_in_enums.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// objective: test use of define inside enums
2+
// config: EXTRACT_ALL=YES
3+
// config: MACRO_EXPANSION=YES
4+
// check: 107__define__in__enums_8cpp.xml
5+
6+
enum A {
7+
#define ID_A(X) X,
8+
ID_A(A1)
9+
ID_A(A2)
10+
};
11+
12+
enum class B {
13+
#define ID_B(X) X,
14+
ID_B(B1)
15+
ID_B(B2)
16+
};

0 commit comments

Comments
 (0)