diff options
author | Akira Hayakawa <ruby.wktk@gmail.com> | 2014-09-20 19:26:23 +0900 |
---|---|---|
committer | Akira Hayakawa <ruby.wktk@gmail.com> | 2014-09-20 22:17:52 +0900 |
commit | 52f255685640f0f5a3c7a15a4ca44d8608c3a646 (patch) | |
tree | 33d749ac027d6c9363fc64cdf5bc87073d2a3348 /pycparser | |
parent | 044db0c002fdf67ca1d2ef019b309a497f6bc815 (diff) | |
download | pycparser-52f255685640f0f5a3c7a15a4ca44d8608c3a646.tar.gz |
fix: comma operator in ternary operator
Signed-off-by: Akira Hayakawa <ruby.wktk@gmail.com>
Diffstat (limited to 'pycparser')
-rw-r--r-- | pycparser/c_generator.py | 33 |
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): |