Commit c5560a14 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix for comma operator bug.

parent 7619f085
...@@ -2094,7 +2094,7 @@ def p_c_simple_declarator(s, ctx, empty, is_type, cmethod_flag, ...@@ -2094,7 +2094,7 @@ def p_c_simple_declarator(s, ctx, empty, is_type, cmethod_flag,
error(s.position(), "Declarator should be empty") error(s.position(), "Declarator should be empty")
s.next() s.next()
cname = p_opt_cname(s) cname = p_opt_cname(s)
if name != "operator" and s.sy == '=' and assignable: if name != 'operator' and s.sy == '=' and assignable:
s.next() s.next()
rhs = p_test(s) rhs = p_test(s)
else: else:
...@@ -2102,27 +2102,29 @@ def p_c_simple_declarator(s, ctx, empty, is_type, cmethod_flag, ...@@ -2102,27 +2102,29 @@ def p_c_simple_declarator(s, ctx, empty, is_type, cmethod_flag,
error(s.position(), "Empty declarator") error(s.position(), "Empty declarator")
name = "" name = ""
cname = None cname = None
print pos, ctx.__dict__
if cname is None and ctx.namespace is not None: if cname is None and ctx.namespace is not None:
cname = ctx.namespace + "::" + name cname = ctx.namespace + "::" + name
if name == 'operator' and ctx.visibility == 'extern': if name == 'operator' and ctx.visibility == 'extern' and nonempty:
op = s.sy op = s.sy
s.next() if op in '+-*/<=>!%&|([^~,':
# Handle diphthong operators.
if op == '(':
s.expect(')')
op = '()'
elif op == '[':
s.expect(']')
op = '[]'
if op in ['-', '+', '|', '&'] and s.sy == op:
op = op*2
s.next()
if s.sy == '=':
op += s.sy
s.next() s.next()
if op not in supported_overloaded_operators: # Handle diphthong operators.
s.error("Overloading operator '%s' not yet supported." % op) if op == '(':
name = name+op s.expect(')')
op = '()'
elif op == '[':
s.expect(']')
op = '[]'
if op in ['-', '+', '|', '&'] and s.sy == op:
op = op*2
s.next()
if s.sy == '=':
op += s.sy
s.next()
if op not in supported_overloaded_operators:
s.error("Overloading operator '%s' not yet supported." % op)
name = name+op
result = Nodes.CNameDeclaratorNode(pos, result = Nodes.CNameDeclaratorNode(pos,
name = name, cname = cname, default = rhs) name = name, cname = cname, default = rhs)
result.calling_convention = calling_convention result.calling_convention = calling_convention
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment