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)
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