10000 Fix removal of keywords from method return types · PBCOnGit/robotpy-cppheaderparser@2a8a096 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2a8a096

Browse files
committed
Fix removal of keywords from method return types
1 parent c23af0b commit 2a8a096

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

CppHeaderParser/CppHeaderParser.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,12 @@ def __init__(self, nameStack, curClass, methinfo, curTemplate, doxygen, location
983983
if doxygen:
984984
self["doxygen"] = doxygen
985985

986+
# Remove leading keywords
987+
for i, word in enumerate(nameStack):
988+
if word not in Resolver.C_KEYWORDS:
989+
nameStack = nameStack[i:]
990+
break
991+
986992
if "operator" in nameStack:
987993
self["rtnType"] = " ".join(nameStack[: nameStack.index("operator")])
988994
self["name"] = "".join(
@@ -993,12 +999,7 @@ def __init__(self, nameStack, curClass, methinfo, curTemplate, doxygen, location
993999
self["name"] = " ".join(
9941000
nameStack[nameStack.index("(") - 1 : nameStack.index("(")]
9951001
)
996-
if self["rtnType"].startswith("virtual"):
997-
self["rtnType"] = self["rtnType"][len("virtual") :].strip()
998-
elif self["rtnType"].startswith("static"):
999-
self["rtnType"] = self["rtnType"][len("static") :].strip()
1000-
elif self["rtnType"].startswith("inline"):
1001-
self["rtnType"] = self["rtnType"][len("inline") :].strip()
1002+
10021003
if len(self["rtnType"]) == 0 or self["name"] == curClass:
10031004
self["rtnType"] = "void"
10041005

@@ -1444,6 +1445,7 @@ class Resolver(object):
14441445
C_MODIFIERS = set(C_MODIFIERS)
14451446

14461447
C_KEYWORDS = "extern virtual static explicit inline friend".split()
1448+
C_KEYWORDS = set(C_KEYWORDS)
14471449

14481450
SubTypedefs = {} # TODO deprecate?
14491451
NAMESPACES = []

test/test_CppHeaderParser.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3906,5 +3906,27 @@ def test_fn(self):
39063906
self.assertEqual(self.cppHeader.typedefs["A"], "C")
39073907

39083908

3909+
class InlineVirtual(unittest.TestCase):
3910+
def setUp(self):
3911+
self.cppHeader = CppHeaderParser.CppHeader(
3912+
"""
3913+
class B {
3914+
public:
3915+
virtual inline int aMethod();
3916+
};
3917+
""",
3918+
"string",
3919+
)
3920+
3921+
def test_fn(self):
3922+
c = self.cppHeader.classes["B"]
3923+
self.assertEqual("B", c["name"])
3924+
3925+
m = c["methods"]["public"][0]
3926+
self.assertEqual(m["name"], "aMethod")
3927+
self.assertEqual(m["rtnType"], "int")
3928+
self.assertEqual(m["returns"], "int")
3929+
3930+
39093931
if __name__ == "__main__":
39103932
unittest.main()

0 commit comments

Comments
 (0)
0