aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorldore <laurent.dore@gmail.com>2018-04-26 14:07:08 +0200
committerEli Bendersky <eliben@users.noreply.github.com>2018-04-26 05:07:08 -0700
commita2a8f4a384bd86efc9faff9030fbb8d905a8ecee (patch)
tree7b53e31a8328204ae97b0b10fb37bbf09a150d99
parent168f54c3ae324c3827d22fb90e456653e6fe584a (diff)
downloadpycparser-a2a8f4a384bd86efc9faff9030fbb8d905a8ecee.tar.gz
Fix non-generated constant expressions in designated initializers (#246) (#255)
-rw-r--r--pycparser/c_generator.py4
-rw-r--r--tests/test_c_generator.py5
2 files changed, 7 insertions, 2 deletions
diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py
index 0575b8b..4c86f84 100644
--- a/pycparser/c_generator.py
+++ b/pycparser/c_generator.py
@@ -283,8 +283,8 @@ class CGenerator(object):
for name in n.name:
if isinstance(name, c_ast.ID):
s += '.' + name.name
- elif isinstance(name, c_ast.Constant):
- s += '[' + name.value + ']'
+ else:
+ s += '[' + self.visit(name) + ']'
s += ' = ' + self._visit_expr(n.expr)
return s
diff --git a/tests/test_c_generator.py b/tests/test_c_generator.py
index 9385e80..4e38f28 100644
--- a/tests/test_c_generator.py
+++ b/tests/test_c_generator.py
@@ -228,6 +228,11 @@ class TestCtoC(unittest.TestCase):
}
''')
+ def test_issue246(self):
+ self._assert_ctoc_correct(r'''
+ int array[3] = {[0] = 0, [1] = 1, [1+1] = 2};
+ ''')
+
def test_exprlist_with_semi(self):
self._assert_ctoc_correct(r'''
void x() {