X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=xcbgen%2Fxtypes.py;h=01d765e5920ef4c34a7bcea6d9738fcbb3c89360;hb=e458401b43b3ebb1b9eb4584269455c7292dfcfa;hp=b23400356f76d346dde05a8a52fa5fd7fa1b3452;hpb=57934caa3fb207320c33312646d8e98290950f51;p=free-sw%2Fxcb%2Fproto diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py index b234003..01d765e 100644 --- a/xcbgen/xtypes.py +++ b/xcbgen/xtypes.py @@ -114,10 +114,12 @@ class Enum(SimpleType): Public fields added: values contains a list of (name, value) tuples. value is empty, or a number. + bits contains a list of (name, bitnum) tuples. items only appear if specified as a bit. bitnum is a number. ''' def __init__(self, name, elt): SimpleType.__init__(self, name, 4) self.values = [] + self.bits = [] for item in list(elt): # First check if we're using a default value if len(list(item)) == 0: @@ -129,8 +131,8 @@ class Enum(SimpleType): if value.tag == 'value': self.values.append((item.get('name'), value.text)) elif value.tag == 'bit': - # XXX replace this with a simple number, please. - self.values.append((item.get('name'), '(1 << %s)' % value.text)) + self.values.append((item.get('name'), '%u' % (1 << int(value.text)))) + self.bits.append((item.get('name'), value.text)) def resolve(self, module): self.resolved = True @@ -233,15 +235,15 @@ class ExprType(Type): def fixed_size(self): return True -class SizedPadType(Type): +class PadType(Type): ''' - Derived class which represents a padding field of given size. + Derived class which represents a padding field. ''' - def __init__(self, size): + def __init__(self, elt): Type.__init__(self, tcard8.name) self.is_pad = True self.size = 1 - self.nmemb = int(size) + self.nmemb = 1 if (elt == None) else int(elt.get('bytes')) def resolve(self, module): self.resolved = True @@ -249,13 +251,6 @@ class SizedPadType(Type): def fixed_size(self): return True -class PadType(SizedPadType): - ''' - Derived class which represents a padding field of given type. - ''' - def __init__(self, elt): - self.nmemb = "1" if (elt == None) else elt.get('bytes') - SizedPadType.__init__(self, self.nmemb) class ComplexType(Type): ''' @@ -279,7 +274,6 @@ class ComplexType(Type): # Resolve all of our field datatypes. for child in list(self.elt): - value_mask_pad = None if child.tag == 'pad': field_name = 'pad' + str(pads) fkey = 'CARD8' @@ -306,7 +300,6 @@ class ComplexType(Type): fkey = 'CARD32' type = ListType(child, module.get_type(fkey), self) visible = True - value_mask_pad = child.get('value-mask-pad') else: # Hit this on Reply continue @@ -318,17 +311,6 @@ class ComplexType(Type): # Recursively resolve the type (could be another structure, list) type.resolve(module) - # Add a value-mask-pad if necessary - if value_mask_pad != None: - vmp_field_name = 'pad' + str(pads) - vmp_fkey = 'CARD8' - vmp_type = SizedPadType(value_mask_pad) - pads = pads + 1 - vmp_visible = False - vmp_field_type = module.get_type_name(vmp_fkey) - vmp_type.make_member_of(module, self, vmp_field_type, vmp_field_name, vmp_visible, True, False) - vmp_type.resolve(module) - self.calc_size() # Figure out how big we are self.resolved = True