summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2009-11-23 13:49:08 +0800
committerBrian Paul <brianp@vmware.com>2010-01-04 14:15:15 -0700
commitc3bd85791766e4a6f3896ea724e18640e56c6808 (patch)
tree51b8789b62c145dd49ca5021c9e369b33b5c7254 /src
parent8264a6a8a6486562a86bb0da3f631c298edbd303 (diff)
mesa/es: Add a sanity check to APIspec.py.
Some attributes are constant in a switch. Raise an exception if they are not. Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/es/main/APIspec.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/mesa/es/main/APIspec.py b/src/mesa/es/main/APIspec.py
index f07e4261fa..7d27e46e28 100644
--- a/src/mesa/es/main/APIspec.py
+++ b/src/mesa/es/main/APIspec.py
@@ -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):