X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fc_client.py;h=d86d05e2421910122ec40e65f9e0fc6d53aa8ae4;hb=e82c34c2f7ac3fbb23ab14cbee8df2dd9178f5a4;hp=299ad544c2dd2a29db89927456001c63a4206e4d;hpb=9984b72888108a038d6b3f7dee374d17e26ef9e2;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/c_client.py b/src/c_client.py index 299ad54..d86d05e 100755 --- a/src/c_client.py +++ b/src/c_client.py @@ -135,6 +135,9 @@ def c_open(self): _ns = self.namespace _ns.c_ext_global_name = _n(_ns.prefix + ('id',)) + # Build the type-name collision avoidance table used by c_enum + build_collision_table() + _h_setlevel(0) _c_setlevel(0) @@ -216,21 +219,36 @@ def c_close(self): cfile.write('\n') cfile.close() +def build_collision_table(): + global namecount + namecount = {} + + for v in module.types.values(): + name = _t(v[0]) + namecount[name] = (namecount.get(name) or 0) + 1 + def c_enum(self, name): ''' Exported function that handles enum declarations. ''' + + tname = _t(name) + if namecount[tname] > 1: + tname = _t(name + ('enum',)) + _h_setlevel(0) _h('') + _h('typedef enum %s {', tname) - next = -1 + count = len(self.values) for (enam, eval) in self.values: - if eval == '': - next += 1 - else: - next = int(eval) - _h('static const uint32_t %s = %d;', _n(name + (enam,)).upper(), next) + count = count - 1 + equals = ' = ' if eval != '' else '' + comma = ',' if count > 0 else '' + _h(' %s%s%s%s', _n(name + (enam,)).upper(), equals, eval, comma) + + _h('} %s;', tname) def _c_type_setup(self, name, postfix): '''