diff options
author | Christoph Reimann <oss@arcor.de> | 2010-07-22 22:53:49 +0200 |
---|---|---|
committer | Christoph Reimann <oss@arcor.de> | 2010-07-22 22:53:49 +0200 |
commit | dd227908abdb36ba630ac9d8a5449470721e38b8 (patch) | |
tree | 5c78b9dca5a65a5dfdcc3fd95b50943b5f322316 /xcbgen | |
parent | 9895cf562c5842813782ce494253c9127e699354 (diff) | |
download | xcb-proto-dd227908abdb36ba630ac9d8a5449470721e38b8.tar.gz |
support name attribute for bitcases and set BitcaseType.has_name accordingly
Diffstat (limited to 'xcbgen')
-rw-r--r-- | xcbgen/xtypes.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py index abfb841..363608d 100644 --- a/xcbgen/xtypes.py +++ b/xcbgen/xtypes.py @@ -378,16 +378,25 @@ class SwitchType(ComplexType): # Resolve all of our field datatypes. for index, child in enumerate(list(self.elt)): if child.tag == 'bitcase': + field_name = child.get('name') + # construct the switch type name from the parent type and the field name + if field_name is None: + field_type = self.name + ('bitcase%d' % index,) + else: + field_type = self.name + (field_name,) + # use self.parent to indicate anchestor, # as switch does not contain named fields itself type = BitcaseType(index, self.name, child, *parents) + if field_name is None: + type.has_name = False visible = True # Get the full type name for the field field_type = type.name # add the field to ourself - type.make_member_of(module, self, field_type, index, visible, True, False) + type.make_member_of(module, self, field_type, field_name, visible, True, False) # recursively resolve the type (could be another structure, list) type.resolve(module) @@ -470,6 +479,7 @@ class BitcaseType(ComplexType): elts = list(elt) self.expr = Expression(elts[0] if len(elts) else elt, self) ComplexType.__init__(self, name, elts[1:]) + self.has_name = True self.index = 1 self.lenfield_parent = list(parent) + [self] self.parents = list(parent) |