diff options
author | marha <marha@users.sourceforge.net> | 2013-11-07 08:21:08 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-11-07 08:21:08 +0100 |
commit | f7050e0ff2d1dd147ff5ef45f8ff7d8d7833db48 (patch) | |
tree | b730b2594caa70dcbbf0a860da25d46d26f747ed /libxcb/xcb-proto/xcbgen | |
parent | 31fd4c5654595a4763e492e4ec26f66ca3a8a405 (diff) | |
download | vcxsrv-f7050e0ff2d1dd147ff5ef45f8ff7d8d7833db48.tar.gz vcxsrv-f7050e0ff2d1dd147ff5ef45f8ff7d8d7833db48.tar.bz2 vcxsrv-f7050e0ff2d1dd147ff5ef45f8ff7d8d7833db48.zip |
xextproto fontconfig libxcb mesa xserver git update 7 Nov 2013
xserver commit ab4b1fb38a61feb73d8336cc7a3399eb9d3d25be
libxcb commit e4e0c6eec861f4c69da12060dc8dbe7a63fa5eb6
libxcb/xcb-proto commit 530817c5a926f006d8d61f9dcfd9ab73269a9805
xextproto commit 3f355f138d6df57e067458a20f47307883048adb
fontconfig commit a4443e64c89256087d40462cfbb482950873e366
mesa commit 110009302bddb4c42a5b3ed5ca451d6bb50a06a0
Diffstat (limited to 'libxcb/xcb-proto/xcbgen')
-rw-r--r-- | libxcb/xcb-proto/xcbgen/expr.py | 3 | ||||
-rw-r--r-- | libxcb/xcb-proto/xcbgen/state.py | 2 | ||||
-rw-r--r-- | libxcb/xcb-proto/xcbgen/xtypes.py | 60 |
3 files changed, 63 insertions, 2 deletions
diff --git a/libxcb/xcb-proto/xcbgen/expr.py b/libxcb/xcb-proto/xcbgen/expr.py index 4f8af6f83..f9d5179f0 100644 --- a/libxcb/xcb-proto/xcbgen/expr.py +++ b/libxcb/xcb-proto/xcbgen/expr.py @@ -13,7 +13,7 @@ class Field(object): auto is true iff the field is on the wire but not in the request API (e.g. opcode) enum is the enum name this field refers to, if any. ''' - def __init__(self, type, field_type, field_name, visible, wire, auto, enum=None): + def __init__(self, type, field_type, field_name, visible, wire, auto, enum=None, isfd=False): self.type = type self.field_type = field_type self.field_name = field_name @@ -21,6 +21,7 @@ class Field(object): self.visible = visible self.wire = wire self.auto = auto + self.isfd = isfd class Expression(object): diff --git a/libxcb/xcb-proto/xcbgen/state.py b/libxcb/xcb-proto/xcbgen/state.py index ae3d2d45f..10a8722ea 100644 --- a/libxcb/xcb-proto/xcbgen/state.py +++ b/libxcb/xcb-proto/xcbgen/state.py @@ -74,9 +74,11 @@ class Module(object): self.add_type('CARD8', '', ('uint8_t',), tcard8) self.add_type('CARD16', '', ('uint16_t',), tcard16) self.add_type('CARD32', '', ('uint32_t',), tcard32) + self.add_type('CARD64', '', ('uint64_t',), tcard64) self.add_type('INT8', '', ('int8_t',), tint8) self.add_type('INT16', '', ('int16_t',), tint16) self.add_type('INT32', '', ('int32_t',), tint32) + self.add_type('INT64', '', ('int64_t',), tint64) self.add_type('BYTE', '', ('uint8_t',), tcard8) self.add_type('BOOL', '', ('uint8_t',), tcard8) self.add_type('char', '', ('char',), tchar) diff --git a/libxcb/xcb-proto/xcbgen/xtypes.py b/libxcb/xcb-proto/xcbgen/xtypes.py index a4614d9d2..6150d1818 100644 --- a/libxcb/xcb-proto/xcbgen/xtypes.py +++ b/libxcb/xcb-proto/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) @@ -150,6 +164,44 @@ class Enum(SimpleType): out = __main__.output['enum'] +class FileDescriptor(SimpleType): + ''' + Derived class which represents a file descriptor. Passed via magic kernel stuff + + 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 = [] + self.doc = None + for item in list(elt): + if item.tag == 'doc': + self.doc = Doc(name, item) + + # First check if we're using a default value + if len(list(item)) == 0: + self.values.append((item.get('name'), '')) + continue + + # An explicit value or bit was specified. + value = list(item)[0] + if value.tag == 'value': + self.values.append((item.get('name'), value.text)) + elif value.tag == 'bit': + self.values.append((item.get('name'), '%u' % (1 << int(value.text, 0)))) + self.bits.append((item.get('name'), value.text)) + + def resolve(self, module): + self.resolved = True + + def fixed_size(self): + return True + + out = __main__.output['enum'] + class ListType(Type): ''' Derived class which represents a list of some other datatype. Fixed- or variable-sized. @@ -277,6 +329,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 +375,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) |