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
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: CppHeaderParser/CppHeaderParser.py +15-5Lines changed: 15 additions & 5 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -2208,11 +2208,21 @@ def parse_method_type(self, stack): |
2208 | 2208 | else: |
2209 | 2209 | assert 0 |
2210 | 2210 |
|
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 |
2216 | 2226 |
|
2217 | 2227 | r = header.split() |
2218 | 2228 | name = None |
|
Collapse file
Copy file name to clipboardExpand all lines: test/test_CppHeaderParser.py +37Lines changed: 37 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -4146,5 +4146,42 @@ def test_fn(self): |
4146 | 4146 | self.assertEqual(tt["template"], "template<typename T>") |
4147 | 4147 |
|
4148 | 4148 |
|
| 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 | + |
4149 | 4186 | if __name__ == "__main__": |
4150 | 4187 | unittest.main() |