Be explicit about rvalue references.

This commit is contained in:
Armin Ronacher committed 2011-09-22 10:33:15 +02:00
1 parent bdf5816437
commit 55935bdd04
2 files changed
+18 -2

No files matched your search

+14 -2
View File
@@ -303,7 +303,7 @@ class ArrayDefExpr(WrappingDefExpr):
)
class RefDefExpr(WrappingDefExpr):
class LValRefDefExpr(WrappingDefExpr):
def get_id(self):
return self.typename.get_id() + u'R'
@@ -312,6 +312,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):
@@ -602,7 +611,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
+4
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[]()'