Skip to content

Commit bf25b48

Browse files
committed
C++, document base class grammar, and cleanup.
1 parent 18c9872 commit bf25b48

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

CHANGES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Bugs fixed
6666
transforming.
6767
* C++, fix parsing of 'signed char' and 'unsigned char' as types.
6868
* C++, add missing support for 'friend' functions.
69-
* C++, add support for virtual bases.
69+
* C++, add support for virtual bases (thanks to Rapptz).
7070

7171
Documentation
7272
-------------

sphinx/domains/cpp.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,16 @@
209209
210210
class_object:
211211
goal: a class declaration, but with specification of a base class
212-
TODO: what about templates? for now: skip
213212
grammar:
214213
nested-name
215-
| nested-name ":"
216-
'comma-separated list of nested-name optionally with visibility'
214+
| nested-name ":" base-specifier-list
215+
base-specifier-list ->
216+
base-specifier
217+
| base-specifier-list, base-specifier
218+
base-specifier ->
219+
base-type-specifier
220+
| "virtual" access-spe"cifier[opt] base-type-specifier
221+
| access-specifier[opt] "virtual"[opt] base-type-specifier
217222
Can start with a templateDeclPrefix.
218223
219224
enum_object:
@@ -3011,17 +3016,14 @@ def _parse_class(self):
30113016
if self.skip_string(':'):
30123017
while 1:
30133018
self.skip_ws()
3019+
visibility = 'private'
30143020
virtual = False
3015-
if self.skip_string('virtual'):
3021+
if self.skip_word_and_ws('virtual'):
30163022
virtual = True
3017-
self.skip_ws()
3018-
visibility = 'private'
30193023
if self.match(_visibility_re):
30203024
visibility = self.matched_text
30213025
self.skip_ws()
3022-
if self.skip_string('virtual'):
3023-
if virtual:
3024-
self.fail('Duplicate virtual keyword found')
3026+
if not virtual and self.skip_word_and_ws('virtual'):
30253027
virtual = True
30263028
baseName = self._parse_nested_name()
30273029
bases.append(ASTBaseClass(baseName, visibility, virtual))

0 commit comments

Comments
 (0)