From patchwork Fri Nov 6 06:35:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Blake X-Patchwork-Id: 540823 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 5A0281402D6 for ; Fri, 6 Nov 2015 17:43:52 +1100 (AEDT) Received: from localhost ([::1]:36956 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuakY-0006SR-9X for incoming@patchwork.ozlabs.org; Fri, 06 Nov 2015 01:43:50 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45959) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuadD-0000HZ-3b for qemu-devel@nongnu.org; Fri, 06 Nov 2015 01:36:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zuad8-0004Cc-Fa for qemu-devel@nongnu.org; Fri, 06 Nov 2015 01:36:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51866) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zuad5-0004Be-Sg for qemu-devel@nongnu.org; Fri, 06 Nov 2015 01:36:10 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 977458F2FF; Fri, 6 Nov 2015 06:36:07 +0000 (UTC) Received: from red.redhat.com (ovpn-113-80.phx2.redhat.com [10.3.113.80]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tA66Ztn4008894; Fri, 6 Nov 2015 01:36:07 -0500 From: Eric Blake To: qemu-devel@nongnu.org Date: Thu, 5 Nov 2015 23:35:49 -0700 Message-Id: <1446791754-23823-26-git-send-email-eblake@redhat.com> In-Reply-To: <1446791754-23823-1-git-send-email-eblake@redhat.com> References: <1446791754-23823-1-git-send-email-eblake@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: armbru@redhat.com, Michael Roth Subject: [Qemu-devel] [PATCH v10 25/30] qapi: Hoist tag collision check to Variants.check() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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, this check was the only thing that Variant.check() was doing beyond the work of the superclass ObjectTypeMember.check(), and resulted in a difference of the .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 --- v10: new patch --- scripts/qapi.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index 6d8c4c7..798df51 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -1056,9 +1056,11 @@ class QAPISchemaObjectTypeVariants(object): def check(self, schema, seen): if self.tag_name: # flat union self.tag_member = seen[self.tag_name] - assert isinstance(self.tag_member.type, QAPISchemaEnumType) + tag_type = self.tag_member.type + assert isinstance(tag_type, QAPISchemaEnumType) for v in self.variants: - v.check(schema, self.tag_member.type) + v.check(schema) + assert v.name in tag_type.values def check_clash(self, schema, seen): for v in self.variants: @@ -1071,10 +1073,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):