[lib,3/5] c_client.py: Prefer bit shifts over values in enum

Submitted by Daniel Martin on Nov. 22, 2013, 10:27 p.m.

Details

Message ID 1385159252-14436-4-git-send-email-consume.noise@gmail.com
State New
Headers show

Commit Message

Daniel Martin Nov. 22, 2013, 10:27 p.m.
- When generating enum items prefer a bit shift over decimal values.
- Align the equal signs.
- Add an 'u' suffix to all values to prevent warnings with long values.
  (See bug #71837.)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71837
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
---
 src/c_client.py | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/c_client.py b/src/c_client.py
index 99fd307..2bca0c3 100644
--- a/src/c_client.py
+++ b/src/c_client.py
@@ -268,16 +268,26 @@  def c_enum(self, name):
     _h('')
     _h('typedef enum %s {', tname)
 
-    count = len(self.values)
-
+    bit_values = dict(self.bits)
+    items = []
     for (enam, eval) in self.values:
-        count = count - 1
-        equals = ' = ' if eval != '' else ''
-        comma = ',' if count > 0 else ''
-        doc = ''
-        if hasattr(self, "doc") and self.doc and enam in self.doc.fields:
-            doc = '\n/**< %s */\n' % self.doc.fields[enam]
-        _h('    %s%s%s%s%s', _n(name + (enam,)).upper(), equals, eval, comma, doc)
+        item_name = _n(name + (enam,)).upper()
+        item_value = "(1u << %su)" % bit_values[enam] \
+                if enam in bit_values else "%su" % eval
+        item_doc = self.doc.fields.get(enam, None) \
+                if self.doc is not None else None
+        items.append((item_name, item_value, item_doc))
+
+    last_item = len(items) - 1
+    max_enam_len = max(len(enam) for (enam, *tmp) in items)
+
+    for (idx, (enam, eval, doc)) in enumerate(items):
+        comma = ',' if idx < last_item else ''
+        spaces = ' ' * (max_enam_len - len(enam))
+
+        _h('    %s%s = %s%s', enam, spaces, eval, comma)
+        if doc is not None:
+            _h('/**< %s */', doc)
 
     _h('} %s;', tname)