mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
C++, add support for final classes.
This commit is contained in:
parent
bf25b48d78
commit
8e864076a9
3
CHANGES
3
CHANGES
@ -66,7 +66,8 @@ 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 (thanks to Rapptz).
|
||||
* C++, add missing support for virtual base classes (thanks to Rapptz).
|
||||
* C++, add support for final classes.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
@ -210,8 +210,7 @@ from sphinx.util.docfields import Field, GroupedField
|
||||
class_object:
|
||||
goal: a class declaration, but with specification of a base class
|
||||
grammar:
|
||||
nested-name
|
||||
| nested-name ":" base-specifier-list
|
||||
nested-name "final"[opt] (":" base-specifier-list)[opt]
|
||||
base-specifier-list ->
|
||||
base-specifier
|
||||
| base-specifier-list, base-specifier
|
||||
@ -1878,8 +1877,9 @@ class ASTBaseClass(ASTBase):
|
||||
|
||||
|
||||
class ASTClass(ASTBase):
|
||||
def __init__(self, name, bases):
|
||||
def __init__(self, name, final, bases):
|
||||
self.name = name
|
||||
self.final = final
|
||||
self.bases = bases
|
||||
|
||||
def get_id_v1(self, objectType, symbol):
|
||||
@ -1891,6 +1891,8 @@ class ASTClass(ASTBase):
|
||||
def __unicode__(self):
|
||||
res = []
|
||||
res.append(text_type(self.name))
|
||||
if self.final:
|
||||
res.append(' final')
|
||||
if len(self.bases) > 0:
|
||||
res.append(' : ')
|
||||
first = True
|
||||
@ -1904,6 +1906,9 @@ class ASTClass(ASTBase):
|
||||
def describe_signature(self, signode, mode, env, symbol):
|
||||
_verify_description_mode(mode)
|
||||
self.name.describe_signature(signode, mode, env, symbol=symbol)
|
||||
if self.final:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_annotation('final', 'final')
|
||||
if len(self.bases) > 0:
|
||||
signode += nodes.Text(' : ')
|
||||
for b in self.bases:
|
||||
@ -3011,6 +3016,8 @@ class DefinitionParser(object):
|
||||
|
||||
def _parse_class(self):
|
||||
name = self._parse_nested_name()
|
||||
self.skip_ws()
|
||||
final = self.skip_word_and_ws('final')
|
||||
bases = []
|
||||
self.skip_ws()
|
||||
if self.skip_string(':'):
|
||||
@ -3032,7 +3039,7 @@ class DefinitionParser(object):
|
||||
continue
|
||||
else:
|
||||
break
|
||||
return ASTClass(name, bases)
|
||||
return ASTClass(name, final, bases)
|
||||
|
||||
def _parse_enum(self):
|
||||
scoped = None # is set by CPPEnumObject
|
||||
|
@ -296,6 +296,10 @@ def test_templates():
|
||||
None, "I0E5allowP1FN4funcI1F1BXG!=1EE4typeE")
|
||||
|
||||
|
||||
def test_class():
|
||||
check('class', 'A final', 'A', '1A')
|
||||
|
||||
|
||||
def test_bases():
|
||||
check('class', 'A', "A", "1A")
|
||||
check('class', 'A::B::C', "A::B::C", "N1A1B1CE")
|
||||
|
Loading…
Reference in New Issue
Block a user