Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 953c408

Browse files
committed
Add support for parsing ref-qualifiers
1 parent 72dc4e8 commit 953c408

File tree

2 files changed

+52
-5
lines changed

2 files changed

+52
-5
lines changed

CppHeaderParser/CppHeaderParser.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -2208,11 +2208,21 @@ def parse_method_type(self, stack):
22082208
else:
22092209
assert 0
22102210

2211-
if len(stack) > 3 and stack[-1] == ";" and stack[-3] == "=":
2212-
if stack[-2] == "0":
2213-
info["pure_virtual"] = True
2214-
elif stack[-2] == "delete":
2215-
info["deleted"] = True
2211+
refqual = ""
2212+
if len(stack) > 3:
2213+
if stack[-1] == ";" and stack[-3] == "=":
2214+
if stack[-2] == "0":
2215+
info["pure_virtual"] = True
2216+
elif stack[-2] == "delete":
2217+
info["deleted"] = True
2218+
2219+
for e in reversed(stack):
2220+
if e == ")":
2221+
break
2222+
elif e == "&":
2223+
refqual += "&"
2224+
2225+
info["ref_qualifiers"] = refqual
22162226

22172227
r = header.split()
22182228
name = None

test/test_CppHeaderParser.py

+37
Original file line numberDiff line numberDiff line change
@@ -4146,5 +4146,42 @@ def test_fn(self):
41464146
self.assertEqual(tt["template"], "template<typename T>")
41474147

41484148

4149+
class RefQualifierTest(unittest.TestCase):
4150+
def setUp(self):
4151+
self.cppHeader = CppHeaderParser.CppHeader(
4152+
"""
4153+
struct X {
4154+
void fn0();
4155+
void fn1() &;
4156+
void fn2() &&;
4157+
void fn3() && = 0;
4158+
};
4159+
4160+
""",
4161+
"string",
4162+
)
4163+
4164+
def test_fn0(self):
4165+
fn = self.cppHeader.classes["X"]["methods"]["public"][0]
4166+
self.assertEqual(fn["name"], "fn0")
4167+
self.assertEqual(fn["ref_qualifiers"], "")
4168+
4169+
def test_fn1(self):
4170+
fn = self.cppHeader.classes["X"]["methods"]["public"][1]
4171+
self.assertEqual(fn["name"], "fn1")
4172+
self.assertEqual(fn["ref_qualifiers"], "&")
4173+
4174+
def test_fn1(self):
4175+
fn = self.cppHeader.classes["X"]["methods"]["public"][2]
4176+
self.assertEqual(fn["name"], "fn2")
4177+
self.assertEqual(fn["ref_qualifiers"], "&&")
4178+
4179+
def test_fn3(self):
4180+
fn = self.cppHeader.classes["X"]["methods"]["public"][3]
4181+
self.assertEqual(fn["name"], "fn3")
4182+
self.assertEqual(fn["ref_qualifiers"], "&&")
4183+
self.assertEqual(fn["pure_virtual"], True)
4184+
4185+
41494186
if __name__ == "__main__":
41504187
unittest.main()

0 commit comments

Comments
 (0)