From 65dddfcd69801a49ac92e8eb9c2df7fb193dd472 Mon Sep 17 00:00:00 2001 From: Jakob Lykke Andersen Date: Thu, 16 Jun 2016 10:54:16 +0900 Subject: [PATCH] C++, fix parsing of function types in other types. Let all kinds of function parameters be allowed to have a name. Fixes michaeljones/breathe#267. --- sphinx/domains/cpp.py | 7 +++---- tests/test_domain_cpp.py | 5 +++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 46f775e44..a2298b7bc 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -3011,10 +3011,9 @@ class DefinitionParser(object): self.fail('Expected ")" after "..." in ' 'parameters_and_qualifiers.') break - if paramMode == 'function': - arg = self._parse_type_with_init(outer=None, named='single') - else: - arg = self._parse_type(named=False) + # note: it seems that function arguments can always sbe named, + # even in function pointers and similar. + arg = self._parse_type_with_init(outer=None, named='single') # TODO: parse default parameters # TODO: didn't we just do that? args.append(ASTFunctinoParameter(arg)) diff --git a/tests/test_domain_cpp.py b/tests/test_domain_cpp.py index f33e88128..778ac1c55 100644 --- a/tests/test_domain_cpp.py +++ b/tests/test_domain_cpp.py @@ -132,6 +132,11 @@ def test_type_definitions(): check('type', 'A = B', None, '1A') + # from breathe#267 (named function parameters for function pointers + check('type', 'void (*gpio_callback_t)(struct device *port, uint32_t pin)', + 'gpio_callback_t', '15gpio_callback_t') + check('type', 'void (*f)(std::function g)', 'f', '1f') + def test_member_definitions(): check('member', ' const std::string & name = 42',