Merge pull request #82 from robotpy/trailing-return-type-body
Consume function body if present after trailing return type
This commit is contained in:
commit
0e732f1d43
@ -1914,11 +1914,12 @@ class CxxParser:
|
|||||||
fn_template = fn_template[0]
|
fn_template = fn_template[0]
|
||||||
fn_template.raw_requires_post = self._parse_requires(rtok)
|
fn_template.raw_requires_post = self._parse_requires(rtok)
|
||||||
|
|
||||||
|
if self.lex.token_if("ARROW"):
|
||||||
|
self._parse_trailing_return_type(fn)
|
||||||
|
|
||||||
if self.lex.token_if("{"):
|
if self.lex.token_if("{"):
|
||||||
self._discard_contents("{", "}")
|
self._discard_contents("{", "}")
|
||||||
fn.has_body = True
|
fn.has_body = True
|
||||||
elif self.lex.token_if("ARROW"):
|
|
||||||
self._parse_trailing_return_type(fn)
|
|
||||||
|
|
||||||
def _parse_method_end(self, method: Method) -> None:
|
def _parse_method_end(self, method: Method) -> None:
|
||||||
"""
|
"""
|
||||||
@ -1963,6 +1964,9 @@ class CxxParser:
|
|||||||
method.ref_qualifier = tok_value
|
method.ref_qualifier = tok_value
|
||||||
elif tok_value == "->":
|
elif tok_value == "->":
|
||||||
self._parse_trailing_return_type(method)
|
self._parse_trailing_return_type(method)
|
||||||
|
if self.lex.token_if("{"):
|
||||||
|
self._discard_contents("{", "}")
|
||||||
|
method.has_body = True
|
||||||
break
|
break
|
||||||
elif tok_value == "throw":
|
elif tok_value == "throw":
|
||||||
tok = self._next_token_must_be("(")
|
tok = self._next_token_must_be("(")
|
||||||
|
@ -1194,3 +1194,67 @@ def test_auto_decltype_return() -> None:
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_fn_trailing_return_with_body() -> None:
|
||||||
|
content = """
|
||||||
|
auto test() -> void
|
||||||
|
{
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
data = parse_string(content, cleandoc=True)
|
||||||
|
|
||||||
|
assert data == ParsedData(
|
||||||
|
namespace=NamespaceScope(
|
||||||
|
functions=[
|
||||||
|
Function(
|
||||||
|
return_type=Type(
|
||||||
|
typename=PQName(segments=[FundamentalSpecifier(name="void")])
|
||||||
|
),
|
||||||
|
name=PQName(segments=[NameSpecifier(name="test")]),
|
||||||
|
parameters=[],
|
||||||
|
has_body=True,
|
||||||
|
has_trailing_return=True,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_method_trailing_return_with_body() -> None:
|
||||||
|
content = """
|
||||||
|
struct X {
|
||||||
|
auto test() -> void
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
"""
|
||||||
|
data = parse_string(content, cleandoc=True)
|
||||||
|
|
||||||
|
assert data == ParsedData(
|
||||||
|
namespace=NamespaceScope(
|
||||||
|
classes=[
|
||||||
|
ClassScope(
|
||||||
|
class_decl=ClassDecl(
|
||||||
|
typename=PQName(
|
||||||
|
segments=[NameSpecifier(name="X")], classkey="struct"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
methods=[
|
||||||
|
Method(
|
||||||
|
return_type=Type(
|
||||||
|
typename=PQName(
|
||||||
|
segments=[FundamentalSpecifier(name="void")]
|
||||||
|
)
|
||||||
|
),
|
||||||
|
name=PQName(segments=[NameSpecifier(name="test")]),
|
||||||
|
parameters=[],
|
||||||
|
has_body=True,
|
||||||
|
has_trailing_return=True,
|
||||||
|
access="public",
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user