summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2015-11-18 01:52:48 -0700
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:28:19 -0600
commit05d30a5eb47bea226d0b15a6edfe1ab70afd7d21 (patch)
tree8c1b34904ab1107ac933adb7a2288137ed2dda5d /scripts
parente8c5c854e87247f7a35b52656f28584b0c463000 (diff)
downloadhqemu-05d30a5eb47bea226d0b15a6edfe1ab70afd7d21.zip
hqemu-05d30a5eb47bea226d0b15a6edfe1ab70afd7d21.tar.gz
qapi: Hoist tag collision check to Variants.check()
Checking that a given QAPISchemaObjectTypeVariant.name is a member of the corresponding QAPISchemaEnumType of the owning QAPISchemaObjectTypeVariants.tag_member ensures that there are no collisions in the generated C union for those tag values (since the enum itself should have no collisions). However, ever since its introduction in f51d8c3d, this was the only additional action of of Variant.check(), beyond calling the superclass Member.check(). This forces a difference in .check() signatures, just to pass the enum type down. Simplify things by instead doing the tag name check as part of Variants.check(), at which point we can rely on inheritance instead of overriding Variant.check(). Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1447836791-369-14-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi.py7
1 files changed, 2 insertions, 5 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 296b9bb..c6f3fce 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1059,7 +1059,8 @@ class QAPISchemaObjectTypeVariants(object):
self.tag_member = seen[self.tag_name]
assert isinstance(self.tag_member.type, QAPISchemaEnumType)
for v in self.variants:
- v.check(schema, self.tag_member.type)
+ v.check(schema)
+ assert v.name in self.tag_member.type.values
if isinstance(v.type, QAPISchemaObjectType):
v.type.check(schema)
@@ -1075,10 +1076,6 @@ class QAPISchemaObjectTypeVariant(QAPISchemaObjectTypeMember):
def __init__(self, name, typ):
QAPISchemaObjectTypeMember.__init__(self, name, typ, False)
- def check(self, schema, tag_type):
- QAPISchemaObjectTypeMember.check(self, schema)
- assert self.name in tag_type.values
-
# This function exists to support ugly simple union special cases
# TODO get rid of them, and drop the function
def simple_union_type(self):
OpenPOWER on IntegriCloud