mesa/es: Add a sanity check to APIspec.py.
authorChia-I Wu <olvaffe@gmail.com>
Mon, 23 Nov 2009 05:49:08 +0000 (13:49 +0800)
committerBrian Paul <brianp@vmware.com>
Mon, 4 Jan 2010 21:15:15 +0000 (14:15 -0700)
Some attributes are constant in a switch.  Raise an exception if they
are not.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
src/mesa/es/main/APIspec.py

index f07e426..7d27e46 100644 (file)
@@ -323,12 +323,27 @@ class Checker(object):
 
     def __init__(self):
         self.switches = {}
+        self.switch_constants = {}
 
     def add_desc(self, desc):
         """Add a description."""
-        # TODO take index into consideration
+        # TODO allow index to vary
+        const_attrs = ["index", "error", "convert", "size_str"]
         if desc.name not in self.switches:
             self.switches[desc.name] = []
+            self.switch_constants[desc.name] = {}
+            for attr in const_attrs:
+                self.switch_constants[desc.name][attr] = None
+
+        # some attributes, like error code, should be the same for all descs
+        consts = self.switch_constants[desc.name]
+        for attr in const_attrs:
+            if getattr(desc, attr) is not None:
+                if (consts[attr] is not None and
+                    consts[attr] != getattr(desc, attr)):
+                    raise SpecError("mismatch %s for %s" % (attr, desc.name))
+                consts[attr] = getattr(desc, attr)
+
         self.switches[desc.name].append(desc)
 
     def validate(self, func, param_nodes):
@@ -348,6 +363,7 @@ class Checker(object):
                     tmp.add_desc(desc)
 
         self.switches = tmp.switches
+        self.switch_constants = tmp.switch_constants
         return True
 
     def flatten(self, name=None):