mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
C++, add support for virtual base classes
This commit is contained in:
parent
8401d67909
commit
7d836e16ab
1
CHANGES
1
CHANGES
@ -66,6 +66,7 @@ Bugs fixed
|
||||
transforming.
|
||||
* C++, fix parsing of 'signed char' and 'unsigned char' as types.
|
||||
* C++, add missing support for 'friend' functions.
|
||||
* C++, add support for virtual bases.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
@ -1845,15 +1845,18 @@ class ASTTypeUsing(ASTBase):
|
||||
|
||||
|
||||
class ASTBaseClass(ASTBase):
|
||||
def __init__(self, name, visibility):
|
||||
def __init__(self, name, visibility, virtual):
|
||||
self.name = name
|
||||
self.visibility = visibility
|
||||
self.virtual = virtual
|
||||
|
||||
def __unicode__(self):
|
||||
res = []
|
||||
if self.visibility != 'private':
|
||||
res.append(self.visibility)
|
||||
res.append(' ')
|
||||
if self.virtual:
|
||||
res.append('virtual ')
|
||||
res.append(text_type(self.name))
|
||||
return u''.join(res)
|
||||
|
||||
@ -1863,6 +1866,9 @@ class ASTBaseClass(ASTBase):
|
||||
signode += addnodes.desc_annotation(self.visibility,
|
||||
self.visibility)
|
||||
signode += nodes.Text(' ')
|
||||
if self.virtual:
|
||||
signode += addnodes.desc_annotation('virtual', 'virtual')
|
||||
signode += nodes.Text(' ')
|
||||
self.name.describe_signature(signode, 'markType', env, symbol=symbol)
|
||||
|
||||
|
||||
@ -3005,11 +3011,20 @@ class DefinitionParser(object):
|
||||
if self.skip_string(':'):
|
||||
while 1:
|
||||
self.skip_ws()
|
||||
virtual = False
|
||||
if self.skip_string('virtual'):
|
||||
virtual = True
|
||||
self.skip_ws()
|
||||
visibility = 'private'
|
||||
if self.match(_visibility_re):
|
||||
visibility = self.matched_text
|
||||
self.skip_ws()
|
||||
if self.skip_string('virtual'):
|
||||
if virtual == True:
|
||||
self.fail('Duplicate virtual keyword found')
|
||||
virtual = True
|
||||
baseName = self._parse_nested_name()
|
||||
bases.append(ASTBaseClass(baseName, visibility))
|
||||
bases.append(ASTBaseClass(baseName, visibility, virtual))
|
||||
self.skip_ws()
|
||||
if self.skip_string(','):
|
||||
continue
|
||||
|
@ -304,6 +304,9 @@ def test_bases():
|
||||
check('class', 'A : public B', "A", "1A")
|
||||
check('class', 'A : B, C', "A", "1A")
|
||||
check('class', 'A : B, protected C, D', "A", "1A")
|
||||
check('class', 'A : virtual private B', 'A', '1A', output='A : virtual B')
|
||||
check('class', 'A : B, virtual C', 'A', '1A')
|
||||
check('class', 'A : public virtual B', 'A', '1A')
|
||||
|
||||
|
||||
def test_operators():
|
||||
|
Loading…
Reference in New Issue
Block a user