From dd227908abdb36ba630ac9d8a5449470721e38b8 Mon Sep 17 00:00:00 2001 From: Christoph Reimann Date: Thu, 22 Jul 2010 22:53:49 +0200 Subject: [PATCH] support name attribute for bitcases and set BitcaseType.has_name accordingly --- src/xkb.xml | 16 ++++++++-------- xcbgen/xtypes.py | 12 +++++++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/xkb.xml b/src/xkb.xml index 33d3ea3..3ccc586 100644 --- a/src/xkb.xml +++ b/src/xkb.xml @@ -1973,7 +1973,7 @@ authorization from the authors. reported - + Types @@ -2058,7 +2058,7 @@ authorization from the authors. - + CompatMap @@ -2079,7 +2079,7 @@ authorization from the authors. - + ClientSymbols @@ -2164,7 +2164,7 @@ authorization from the authors. - + ServerSymbols @@ -2249,7 +2249,7 @@ authorization from the authors. - + IndicatorMaps @@ -2260,7 +2260,7 @@ authorization from the authors. nIndicators - + KeyNames @@ -2361,7 +2361,7 @@ authorization from the authors. - + OtherNames @@ -2462,7 +2462,7 @@ authorization from the authors. - + Geometry 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) -- 2.34.1