From c3bd85791766e4a6f3896ea724e18640e56c6808 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 23 Nov 2009 13:49:08 +0800 Subject: 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 --- src/mesa/es/main/APIspec.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src') 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): -- cgit v1.2.3