summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2010-10-13 12:48:09 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2010-10-13 13:27:17 +0100
commit60a4992b97ac8ef3bbbd981a92635e3f1b0fd144 (patch)
treeeaeb59e7f6c52670e833009a05bcc6cd304462ff /tools
parentfb51293d1e7570f4acc17291154ded5800ca9b2b (diff)
specparser: complain when a bad tp:flag value is given
They should always be powers of two, so open up a can of whoop-ass when they're not. Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
Diffstat (limited to 'tools')
-rw-r--r--tools/specparser.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/specparser.py b/tools/specparser.py
index 1bb9065c..5c64a049 100644
--- a/tools/specparser.py
+++ b/tools/specparser.py
@@ -42,6 +42,7 @@ class MismatchedFlagsAndEnum(Exception): pass
class TypeMismatch(Exception): pass
class MissingVersion(Exception): pass
class DuplicateEnumValueValue(Exception): pass
+class BadFlagValue(Exception): pass
class Xzibit(Exception):
def __init__(self, parent, child):
@@ -1005,6 +1006,20 @@ class Flags(EnumLike):
self.check_for_duplicates()
+ # make sure all these values are sane
+ for flag in self.values:
+ v = int(flag.value)
+ found = False
+
+ for i in range(0, 20): # I think this is reasonable for now
+ if v == 2**i:
+ found = True
+ break
+
+ if not found:
+ raise BadFlagValue('Flags %s has bad value (not a power of '
+ 'two): %s=%s' % (self.name, flag.short_name, v))
+
class TokenBase(Base):
devhelp_name = "macro" # it's a constant, which is near enough...