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

Lines changed: 15 additions & 5 deletions
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

Lines changed: 37 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy