Skip to content

Commit c36c147

Browse files
velmafiamyint
authored andcommitted
Skip the preprocessor macros when parsing initializer lists instead of crashing. (#139)
1 parent e7da41e commit c36c147

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

cpp/ast.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,10 @@ def _get_method(self, return_type_and_name, modifiers, templated_types,
10901090
initializers = {}
10911091
if token.name == ':':
10921092
while token.name != ';' and token.name != '{':
1093+
# skip preprocesors macros
1094+
if token.name.startswith(('#if', '#elif', '#else', '#endif')):
1095+
token = self._get_next_token()
1096+
continue
10931097
member, token = self.get_name()
10941098
member = member[0]
10951099
if token.name == '(' or token.name == '{':

test/ctor_init_list.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Foo {
2+
public:
3+
int first,
4+
#if defined(TEST)
5+
int second;
6+
#endif
7+
};
8+
9+
Foo::Foo():
10+
first(1)
11+
#if defined(TEST) // this 3 lines
12+
,second(2) // generated
13+
#endif // IndexError: list index out of range
14+
{}

0 commit comments

Comments
 (0)