8000 Fix nested classes and unions · robotpy/robotpy-cppheaderparser@46bb3d6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 46bb3d6

Browse files
committed
Fix nested classes and unions
1 parent d444b58 commit 46bb3d6

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

CppHeaderParser/CppHeaderParser.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2871,8 +2871,9 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
28712871
self.curAccessSpecifier = self.accessSpecifierStack[-1]
28722872
self.accessSpecifierStack = self.accessSpecifierStack[:-1]
28732873
if self.curClass and self.classes[self.curClass]["parent"]:
2874-
self.curClass = self.classes[self.curClass]["parent"][
2875-
"name"
2874+
thisClass = self.classes[self.curClass]
2875+
self.curClass = self.curClass[
2876+
: -(len(thisClass["name"]) + 2)
28762877
]
28772878
else:
28782879
self.curClass = ""

test/test_CppHeaderParser.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3744,5 +3744,46 @@ def test_fn(self):
37443744
self.assertEqual("fn", inner["methods"]["public"][0]["name"])
37453745

37463746

3747+
class AnonUnion_TestCase(unittest.TestCase):
3748+
def setUp(self):
3749+
self.cppHeader = CppHeaderParser.CppHeader(
3750+
"""
3751+
struct Outer {
3752+
union {
3753+
int x;
3754+
int y;
3755+
};
3756+
int z;
3757+
};
3758+
""",
3759+
"string",
3760+
)
3761+
3762+
def test_fn(self):
3763+
self.assertEqual(len(self.cppHeader.functions), 0)
3764+
3765+
outer = self.cppHeader.classes["Outer"]
3766+
self.assertEqual(outer["parent"], None)
3767+
3768+
inner = self.cppHeader.classes["Outer::union "]
3769+
self.assertIs(inner["parent"], outer)
3770+
3771+
self.assertEqual(2, len(outer["properties"]["public"]))
3772+
self.assertEqual(0, len(outer["properties"]["protected"]))
3773+
self.assertEqual(0, len(outer["properties"]["private"]))
3774+
3775+
props = outer["properties"]["public"]
3776+
self.assertEqual(props[0]["name"], "")
3777+
self.assertEqual(props[1]["name"], "z")
3778+
3779+
self.assertEqual(2, len(outer["properties"]["public"]))
3780+
self.assertEqual(0, len(outer["properties"]["protected"]))
3781+
self.assertEqual(0, len(outer["properties"]["private"]))
3782+
3783+
props = inner["properties"]["public"]
3784+
self.assertEqual(props[0]["name"], "x")
3785+
self.assertEqual(props[1]["name"], "y")
3786+
3787+
37473788
if __name__ == "__main__":
37483789
unittest.main()

0 commit comments

Comments
 (0)
0