From 96779ffed80d9a276905ddaa4210d9b190291231 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 28 Nov 2012 15:26:44 +0900 Subject: [PATCH] fix: cpp domain parser cannot parse a const type with a modifier. closes #1041 --- sphinx/domains/cpp.py | 10 ++++++---- tests/test_cpp_domain.py | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 31daa1f68..edbc091ef 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -672,8 +672,9 @@ class DefinitionParser(object): except ValueError: return False - def _parse_builtin(self, modifier): - path = [modifier] + def _parse_builtin(self, modifiers): + modifier = modifiers[-1] + path = modifiers following = self._modifiers[modifier] while 1: self.skip_ws() @@ -730,9 +731,10 @@ class DefinitionParser(object): # impossible for a template to follow, so what # we do is go to a different function that just # eats types - if following is not None: - return self._parse_builtin(modifier) modifiers.append(modifier) + if following is not None: + return self._parse_builtin(modifiers) + self.skip_ws() else: self.backout() break diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py index bd8aafa76..64a52aa96 100644 --- a/tests/test_cpp_domain.py +++ b/tests/test_cpp_domain.py @@ -43,6 +43,15 @@ def test_type_definitions(): x = 'int printf(const char* fmt, ...)' assert unicode(parse('function', x)) == x + x = 'int foo(const unsigned int j)' + assert unicode(parse('function', x)) == x + + x = 'int foo(const unsigned int const j)' + assert unicode(parse('function', x)) == x + + x = 'int foo(const int* const ptr)' + assert unicode(parse('function', x)) == x + x = 'std::vector> module::blah' assert unicode(parse('type_object', x)) == x