xcbgen: Add unop support
authorMarcin Koƛcielnicki <koriakin@0x04.net>
Thu, 13 May 2010 21:05:58 +0000 (21:05 +0000)
committerJulien Danjou <julien@danjou.info>
Fri, 14 May 2010 11:19:14 +0000 (13:19 +0200)
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Danjou <julien@danjou.info>
xcbgen/expr.py

index ed4b975..79ad8f6 100644 (file)
@@ -26,7 +26,7 @@ class Expression(object):
     Represents a mathematical expression for a list length or exprfield.
 
     Public fields:
-    op is the operation (text +,*,/,<<) or None.
+    op is the operation (text +,*,/,<<,~) or None.
     lhs and rhs are the sub-Expressions if op is set.
     lenfield_name is the name of the length field, or None for request lists.
     lenfield is the Field object for the length field, or None.
@@ -75,6 +75,13 @@ class Expression(object):
             if self.lenfield_name == None:
                 self.lenfield_name = self.rhs.lenfield_name
 
+        elif elt.tag == 'unop':
+            # Op field.  Need to recurse.
+            self.op = elt.get('op')
+            self.rhs = Expression(list(elt)[0], parent)
+
+            self.lenfield_name = self.rhs.lenfield_name
+
         elif elt.tag == 'value':
             # Constant expression
             self.nmemb = int(elt.text, 0)