GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Merge pull request #80 from robotpy/ref-qualifiers · robotpy/robotpy-cppheaderparser@e366144

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • CppHeaderParser
    • CppHeaderParser.py
  • test
    • test_CppHeaderParser.py
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎CppHeaderParser/CppHeaderParser.py‎

Copy file name to clipboardExpand all lines: CppHeaderParser/CppHeaderParser.py
+15-5Lines 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
Collapse file

‎test/test_CppHeaderParser.py‎

Copy file name to clipboardExpand all lines: test/test_CppHeaderParser.py
+37Lines 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 (0)
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.