From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZtcCx-0008Hx-UH for qemu-devel@nongnu.org; Tue, 03 Nov 2015 09:05:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZtcCu-0005bt-4d for qemu-devel@nongnu.org; Tue, 03 Nov 2015 09:05:07 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39425) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZtcCu-0005bf-0A for qemu-devel@nongnu.org; Tue, 03 Nov 2015 09:05:04 -0500 From: Markus Armbruster Date: Tue, 3 Nov 2015 15:04:59 +0100 Message-Id: <1446559499-26984-7-git-send-email-armbru@redhat.com> In-Reply-To: <1446559499-26984-1-git-send-email-armbru@redhat.com> References: <87611jjq98.fsf@blackfin.pond.sub.org> <1446559499-26984-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH 7/7] qapi: QAPISchemaObjectTypeVariants.check() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mdroth@linux.vnet.ibm.com Avoid the ugly flat union / simple union / alternate conditional by doing just the essential work here, namely setting self.tag_member. Move the rest to callers. Signed-off-by: Markus Armbruster --- scripts/qapi.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index f0cbb7e..86341e6 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -988,9 +988,10 @@ class QAPISchemaObjectType(QAPISchemaType): for m in self.local_members: m.check(schema) m.check_clash(seen) + self.members = seen.values() if self.variants: self.variants.check(schema, seen) - self.members = seen.values() + assert self.variants.tag_member in self.members def is_implicit(self): # See QAPISchema._make_implicit_object_type() @@ -1050,12 +1051,8 @@ class QAPISchemaObjectTypeVariants(object): self.variants = variants def check(self, schema, seen): - if self.tag_name: # flat union + if not self.tag_member: # flat union self.tag_member = seen[self.tag_name] - elif seen: # simple union - assert self.tag_member in seen.itervalues() - else: # alternate - self.tag_member.check(schema) assert isinstance(self.tag_member.type, QAPISchemaEnumType) for v in self.variants: v.check(schema, self.tag_member.type) @@ -1088,6 +1085,7 @@ class QAPISchemaAlternateType(QAPISchemaType): self.variants = variants def check(self, schema): + self.variants.tag_member.check(schema) self.variants.check(schema, {}) def json_type(self): -- 2.4.3