C++, fix parsing of defaulted fp function params

This commit is contained in:
Jakob Lykke Andersen 2021-08-15 17:24:14 +02:00
parent 5a3e119d5e
commit 73c1520923
3 changed files with 7 additions and 8 deletions

View File

@ -36,6 +36,8 @@ Bugs fixed
* #9456: html search: abbreation marks are inserted to the search result if * #9456: html search: abbreation marks are inserted to the search result if
failed to fetch the content of the page failed to fetch the content of the page
* #9267: html theme: CSS and JS files added by theme were loaded twice * #9267: html theme: CSS and JS files added by theme were loaded twice
* #9535 comment: C++, fix parsing of defaulted function parameters that are
function pointers.
Testing Testing
-------- --------

View File

@ -5936,13 +5936,6 @@ class DefinitionParser(BaseParser):
'Expecting "," or ")" in parameters-and-qualifiers, ' 'Expecting "," or ")" in parameters-and-qualifiers, '
'got "%s".' % self.current_char) 'got "%s".' % self.current_char)
# TODO: why did we have this bail-out?
# does it hurt to parse the extra stuff?
# it's needed for pointer to member functions
if paramMode != 'function' and False:
return ASTParametersQualifiers(
args, None, None, None, None, None, None, None)
self.skip_ws() self.skip_ws()
const = self.skip_word_and_ws('const') const = self.skip_word_and_ws('const')
volatile = self.skip_word_and_ws('volatile') volatile = self.skip_word_and_ws('volatile')
@ -5989,7 +5982,8 @@ class DefinitionParser(BaseParser):
self.skip_ws() self.skip_ws()
initializer = None initializer = None
if self.skip_string('='): # if this is a function pointer we should not swallow an initializer
if paramMode == 'function' and self.skip_string('='):
self.skip_ws() self.skip_ws()
valid = ('0', 'delete', 'default') valid = ('0', 'delete', 'default')
for w in valid: for w in valid:

View File

@ -639,6 +639,9 @@ def test_domain_cpp_ast_function_definitions():
# from #8960 # from #8960
check('function', 'void f(void (*p)(int, double), int i)', {2: '1fPFvidEi'}) check('function', 'void f(void (*p)(int, double), int i)', {2: '1fPFvidEi'})
# from #9535 comment
check('function', 'void f(void (*p)(int) = &foo)', {2: '1fPFviE'})
def test_domain_cpp_ast_operators(): def test_domain_cpp_ast_operators():
check('function', 'void operator new()', {1: "new-operator", 2: "nwv"}) check('function', 'void operator new()', {1: "new-operator", 2: "nwv"})