aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Poulsen <poulsenseth@yahoo.com>2018-03-16 14:16:23 -0600
committerEli Bendersky <eliben@users.noreply.github.com>2018-03-16 13:16:23 -0700
commit4f755d4884a933c1f808be59ed33ab5c8a351a3b (patch)
tree8a18ebcb7783e98bfa1cd700405377bbf5029959
parent5353b25a68d5a5606ff4ab7f97fdb469aadf4829 (diff)
downloadpycparser-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.py16
-rw-r--r--tests/test_c_generator.py34
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;')