X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=xcbgen%2Fxtypes.py;h=5f45723ceed0109683237f585290a0a32b63d009;hb=0d8f09b6469c45be08dae3665d352269ffcc7df2;hp=a4614d9d25035d0fdff844c38601ec1669b00fe8;hpb=56a82005ac388fcb7a4d1c82e07c7e72eaf69a32;p=free-sw%2Fxcb%2Fproto diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py index a4614d9..5f45723 100644 --- a/xcbgen/xtypes.py +++ b/xcbgen/xtypes.py @@ -75,6 +75,18 @@ class Type(object): complex_type.fields.append(new_field) + def make_fd_of(self, module, complex_type, fd_name): + ''' + Method for making a fd member of a structure. + ''' + new_fd = Field(self, module.get_type_name('INT32'), fd_name, True, False, False, None, True) + # We dump the _placeholder_byte if any fields are added. + for (idx, field) in enumerate(complex_type.fields): + if field == _placeholder_byte: + complex_type.fields[idx] = new_fd + return + + complex_type.fields.append(new_fd) class SimpleType(Type): ''' @@ -103,9 +115,11 @@ class SimpleType(Type): tcard8 = SimpleType(('uint8_t',), 1) tcard16 = SimpleType(('uint16_t',), 2) tcard32 = SimpleType(('uint32_t',), 4) +tcard64 = SimpleType(('uint64_t',), 8) tint8 = SimpleType(('int8_t',), 1) tint16 = SimpleType(('int16_t',), 2) tint32 = SimpleType(('int32_t',), 4) +tint64 = SimpleType(('int64_t',), 8) tchar = SimpleType(('char',), 1) tfloat = SimpleType(('float',), 4) tdouble = SimpleType(('double',), 8) @@ -277,6 +291,7 @@ class ComplexType(Type): self.nmemb = 1 self.size = 0 self.lenfield_parent = [self] + self.fds = [] def resolve(self, module): if self.resolved: @@ -322,9 +337,14 @@ class ComplexType(Type): type.make_member_of(module, self, field_type, field_name, visible, True, False) type.resolve(module) continue + elif child.tag == 'fd': + fd_name = child.get('name') + type = module.get_type('INT32') + type.make_fd_of(module, self, fd_name) + continue else: # Hit this on Reply - continue + continue # Get the full type name for the field field_type = module.get_type_name(fkey)