summaryrefslogtreecommitdiff
path: root/pycparser/c_generator.py
diff options
context:
space:
mode:
authorAkira Hayakawa <ruby.wktk@gmail.com>2014-09-20 19:26:23 +0900
committerAkira Hayakawa <ruby.wktk@gmail.com>2014-09-20 22:17:52 +0900
commit52f255685640f0f5a3c7a15a4ca44d8608c3a646 (patch)
tree33d749ac027d6c9363fc64cdf5bc87073d2a3348 /pycparser/c_generator.py
parent044db0c002fdf67ca1d2ef019b309a497f6bc815 (diff)
downloadpycparser-52f255685640f0f5a3c7a15a4ca44d8608c3a646.tar.gz
fix: comma operator in ternary operator
Signed-off-by: Akira Hayakawa <ruby.wktk@gmail.com>
Diffstat (limited to 'pycparser/c_generator.py')
-rw-r--r--pycparser/c_generator.py33
1 files changed, 14 insertions, 19 deletions
diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py
index 66d42d9..997a97c 100644
--- a/pycparser/c_generator.py
+++ b/pycparser/c_generator.py
@@ -83,6 +83,14 @@ class CGenerator(object):
def visit_IdentifierType(self, n):
return ' '.join(n.names)
+ def _visit_expr(self, n):
+ if isinstance(n, c_ast.InitList):
+ return '{' + self.visit(n) + '}'
+ elif isinstance(n, c_ast.ExprList):
+ return '(' + self.visit(n) + ')'
+ else:
+ return self.visit(n)
+
def visit_Decl(self, n, no_type=False):
# no_type is used when a Decl is part of a DeclList, where the type is
# explicitly only for the first delaration in a list.
@@ -90,12 +98,7 @@ class CGenerator(object):
s = n.name if no_type else self._generate_decl(n)
if n.bitsize: s += ' : ' + self.visit(n.bitsize)
if n.init:
- if isinstance(n.init, c_ast.InitList):
- s += ' = {' + self.visit(n.init) + '}'
- elif isinstance(n.init, c_ast.ExprList):
- s += ' = (' + self.visit(n.init) + ')'
- else:
- s += ' = ' + self.visit(n.init)
+ s += ' = ' + self._visit_expr(n.init)
return s
def visit_DeclList(self, n):
@@ -118,21 +121,13 @@ class CGenerator(object):
def visit_ExprList(self, n):
visited_subexprs = []
for expr in n.exprs:
- if isinstance(expr, c_ast.ExprList):
- visited_subexprs.append('(' + self.visit(expr) + ')')
- else:
- visited_subexprs.append(self.visit(expr))
+ visited_subexprs.append(self._visit_expr(expr))
return ', '.join(visited_subexprs)
def visit_InitList(self, n):
visited_subexprs = []
for expr in n.exprs:
- if isinstance(expr, c_ast.ExprList):
- visited_subexprs.append('(' + self.visit(expr) + ')')
- elif isinstance(expr, c_ast.InitList):
- visited_subexprs.append('{' + self.visit(expr) + '}')
- else:
- visited_subexprs.append(self.visit(expr))
+ visited_subexprs.append(self._visit_expr(expr))
return ', '.join(visited_subexprs)
def visit_Enum(self, n):
@@ -195,9 +190,9 @@ class CGenerator(object):
return 'continue;'
def visit_TernaryOp(self, n):
- s = self.visit(n.cond) + ' ? '
- s += self.visit(n.iftrue) + ' : '
- s += self.visit(n.iffalse)
+ s = self._visit_expr(n.cond) + ' ? '
+ s += self._visit_expr(n.iftrue) + ' : '
+ s += self._visit_expr(n.iffalse)
return s
def visit_If(self, n):