mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merged in vitaut/sphinx/cpp-variadic (pull request #241)
Add support for variadic templates in C++ domain
This commit is contained in:
@@ -343,11 +343,12 @@ class CastOpDefExpr(PrimaryDefExpr):
|
||||
|
||||
class ArgumentDefExpr(DefExpr):
|
||||
|
||||
def __init__(self, type, name, type_suffixes, default=None):
|
||||
def __init__(self, type, name, type_suffixes, default=None, param_pack=False):
|
||||
self.name = name
|
||||
self.type = type
|
||||
self.type_suffixes = type_suffixes
|
||||
self.default = default
|
||||
self.param_pack = param_pack
|
||||
|
||||
def get_name(self):
|
||||
return self.name.get_name()
|
||||
@@ -360,7 +361,11 @@ class ArgumentDefExpr(DefExpr):
|
||||
return u''.join(buf)
|
||||
|
||||
def __unicode__(self):
|
||||
buf = [(u'%s %s' % (self.type or u'', self.name or u'')).strip()]
|
||||
buf = [(u'%s%s %s' % (
|
||||
self.type or u'',
|
||||
'...' if self.param_pack else u'',
|
||||
self.name or u'')
|
||||
).strip()]
|
||||
if self.default is not None:
|
||||
buf.append('=%s' % self.default)
|
||||
for suffix in self.type_suffixes:
|
||||
@@ -834,6 +839,9 @@ class DefinitionParser(object):
|
||||
argname = default = None
|
||||
argtype = self._parse_type()
|
||||
self.skip_ws()
|
||||
param_pack = self.skip_string('...')
|
||||
if param_pack:
|
||||
self.skip_ws()
|
||||
type_suffixes = self._try_parse_type_suffixes()
|
||||
if self.skip_string('='):
|
||||
default = self._parse_default_expr()
|
||||
@@ -848,7 +856,7 @@ class DefinitionParser(object):
|
||||
argtype = None
|
||||
|
||||
args.append(ArgumentDefExpr(argtype, argname,
|
||||
type_suffixes, default))
|
||||
type_suffixes, default, param_pack))
|
||||
self.skip_ws()
|
||||
attributes = dict(
|
||||
signature=args,
|
||||
|
||||
@@ -126,6 +126,8 @@ def test_type_definitions():
|
||||
x = 'int foo(D d=x(a'
|
||||
raises(DefinitionError, parse, 'function', x)
|
||||
|
||||
x = 'int foo(const A&... a)'
|
||||
assert unicode(parse('function', x)) == x
|
||||
|
||||
def test_bases():
|
||||
x = 'A'
|
||||
|
||||
Reference in New Issue
Block a user