diff options
author | Seth Poulsen <poulsenseth@yahoo.com> | 2018-03-16 14:16:23 -0600 |
---|---|---|
committer | Eli Bendersky <eliben@users.noreply.github.com> | 2018-03-16 13:16:23 -0700 |
commit | 4f755d4884a933c1f808be59ed33ab5c8a351a3b (patch) | |
tree | 8a18ebcb7783e98bfa1cd700405377bbf5029959 | |
parent | 5353b25a68d5a5606ff4ab7f97fdb469aadf4829 (diff) | |
download | pycparser-4f755d4884a933c1f808be59ed33ab5c8a351a3b.tar.gz |
Fixed enum formatting in generating C code (issue #240). (#243)
* Fixed enum formatting in generating C code (issue #240).
* Added another enum test. Removed twice-defined function.
-rw-r--r-- | pycparser/c_generator.py | 16 | ||||
-rw-r--r-- | tests/test_c_generator.py | 34 |
2 files changed, 28 insertions, 22 deletions
diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py index 8001739..0575b8b 100644 --- a/pycparser/c_generator.py +++ b/pycparser/c_generator.py @@ -138,11 +138,17 @@ class CGenerator(object): return self._generate_struct_union_enum(n, name='enum') def visit_Enumerator(self, n): - return '{indent}{name} = {value},\n'.format( - indent=self._make_indent(), - name=n.name, - value=self.visit(n.value), - ) + if not n.value: + return '{indent}{name},\n'.format( + indent=self._make_indent(), + name=n.name, + ) + else: + return '{indent}{name} = {value},\n'.format( + indent=self._make_indent(), + name=n.name, + value=self.visit(n.value), + ) def visit_FuncDef(self, n): decl = self.visit(n.decl) diff --git a/tests/test_c_generator.py b/tests/test_c_generator.py index 267bb3d..9385e80 100644 --- a/tests/test_c_generator.py +++ b/tests/test_c_generator.py @@ -103,6 +103,12 @@ class TestCtoC(unittest.TestCase): int b = (int) f; int c = (int*) f; }''') + self._assert_ctoc_correct(r''' + int main() { + int a = (int) b + 8; + int t = (int) c; + } + ''') def test_initlist(self): self._assert_ctoc_correct('int arr[] = {1, 2, 3};') @@ -129,14 +135,6 @@ class TestCtoC(unittest.TestCase): return a; }''') - def test_casts(self): - self._assert_ctoc_correct(r''' - int main() { - int a = (int) b + 8; - int t = (int) c; - } - ''') - def test_struct_decl(self): self._assert_ctoc_correct(r''' typedef struct node_t { @@ -285,20 +283,22 @@ class TestCtoC(unittest.TestCase): self._assert_ctoc_correct('struct foo_s foo = (struct foo_s){ 1, 2 };') def test_enum(self): - s = textwrap.dedent(r''' + self._assert_ctoc_correct(r''' enum e { - a = 1, + a, b = 2, c = 3 }; - '''[1:]) - - self._assert_ctoc_correct(s) - - ast = parse_to_ast(s) - generator = c_generator.CGenerator() - assert generator.visit(ast) == s + ''') + self._assert_ctoc_correct(r''' + enum f + { + g = 4, + h, + i + }; + ''') def test_enum_typedef(self): self._assert_ctoc_correct('typedef enum EnumName EnumTypedefName;') |