Skip to content

Commit b39f90c

Browse files
committed
C++11, C#: Fix parsing of enums with a base type inside classes
1 parent af5dfba commit b39f90c

File tree

5 files changed

+40
-9
lines changed

5 files changed

+40
-9
lines changed

tagmanager/ctags/c.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -2629,14 +2629,6 @@ static void processColon (statementInfo *const st)
26292629
{
26302630
readParents (st, ':');
26312631
}
2632-
else if (parentDecl (st) == DECL_STRUCT || parentDecl (st) == DECL_CLASS)
2633-
{
2634-
c = skipToOneOf (",;");
2635-
if (c == ',')
2636-
setToken (st, TOKEN_COMMA);
2637-
else if (c == ';')
2638-
setToken (st, TOKEN_SEMICOLON);
2639-
}
26402632
else if ((isLanguage (Lang_cpp) || isLanguage (Lang_csharp)) &&
26412633
st->declaration == DECL_ENUM)
26422634
{
@@ -2647,6 +2639,14 @@ static void processColon (statementInfo *const st)
26472639
else if (c == ';')
26482640
setToken (st, TOKEN_SEMICOLON);
26492641
}
2642+
else if (parentDecl (st) == DECL_STRUCT || parentDecl (st) == DECL_CLASS)
2643+
{
2644+
c = skipToOneOf (",;");
2645+
if (c == ',')
2646+
setToken (st, TOKEN_COMMA);
2647+
else if (c == ';')
2648+
setToken (st, TOKEN_SEMICOLON);
2649+
}
26502650
else
26512651
{
26522652
const tokenInfo *const prev = prevToken (st, 1);

tests/ctags/Makefile.am

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ test_sources = \
113113
countall.sql \
114114
cpp_destructor.cpp \
115115
cython_sample.pyx \
116+
cxx11enum.cpp \
116117
db-trig.sql \
117118
debian_432872.f90 \
118119
directives.c \

tests/ctags/cxx11enum.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
enum A:int {A_a, A_b, A_c};
3+
enum B:long {B_a, B_b, B_c};
4+
enum C:unsigned int {C_a, C_b, C_c};
5+
6+
class Foo {
7+
enum D:int {a, b, c};
8+
virtual void foo(enum D a);
9+
};

tests/ctags/cxx11enum.cpp.tags

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# format=tagmanager
2+
A�2�0
3+
A_a�4�A�0
4+
A_b�4�A�0
5+
A_c�4�A�0
6+
B�2�0
7+
B_a�4�B�0
8+
B_b�4�B�0
9+
B_c�4�B�0
10+
C�2�0
11+
C_a�4�C�0
12+
C_b�4�C�0
13+
C_c�4�C�0
14+
D�2�Foo�0
15+
Foo�1�0
16+
a�4�Foo::D�0
17+
b�4�Foo::D�0
18+
c�4�Foo::D�0
19+
foo�1024�(enum D a)�Foo�0�virtual void

tests/ctags/keyword_enum.cs.tags

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ Days
33
EnumTest�1�0
44
Fri�4�EnumTest.Days�0
55
Main�128�()�EnumTest�0�public void
6+
Max�4�EnumTest.Range�0
7+
Min�4�EnumTest.Range�0
68
Mon�4�EnumTest.Days�0
7-
Range�2048�0
9+
Range�2�EnumTest�0
810
Sat�4�EnumTest.Days�0
911
Sun�4�EnumTest.Days�0
1012
Thu�4�EnumTest.Days�0

0 commit comments

Comments
 (0)