Be explicit about rvalue references.

This commit is contained in:
Armin Ronacher
2011-09-22 10:33:15 +02:00
parent 860b410fbc
commit 6b96b10220
2 changed files with 18 additions and 2 deletions

View File

@@ -299,7 +299,7 @@ class ArrayDefExpr(WrappingDefExpr):
)
class RefDefExpr(WrappingDefExpr):
class LValRefDefExpr(WrappingDefExpr):
def get_id(self):
return self.typename.get_id() + u'R'
@@ -308,6 +308,15 @@ class RefDefExpr(WrappingDefExpr):
return u'%s&' % self.typename
class RValRefDefExpr(WrappingDefExpr):
def get_id(self):
return self.typename.get_id() + u'RR'
def __unicode__(self):
return u'%s&&' % self.typename
class ConstDefExpr(WrappingDefExpr):
def __init__(self, typename, prefix=False):
@@ -598,7 +607,10 @@ class DefinitionParser(object):
elif self.match(_array_def_re):
expr = ArrayDefExpr(expr, self.last_match.group(1))
elif self.skip_string('&'):
expr = RefDefExpr(expr)
if self.skip_string('&'):
expr = RValRefDefExpr(expr)
else:
expr = LValRefDefExpr(expr)
else:
return expr

View File

@@ -49,6 +49,10 @@ def test_type_definitions():
assert unicode(parse('type_object', 'long long int foo')) == 'long long foo'
x = 'MyClass::MyClass(MyClass::MyClass&&)'
assert unicode(parse('function', x)) == x
def test_operators():
x = parse('function', 'void operator new [ ] ()')
assert unicode(x) == 'void operator new[]()'