From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42451) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zvnkz-0005Xq-EX for qemu-devel@nongnu.org; Mon, 09 Nov 2015 09:49:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zvnkw-0004Wx-0s for qemu-devel@nongnu.org; Mon, 09 Nov 2015 09:49:17 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50440) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zvnkv-0004Wf-Rh for qemu-devel@nongnu.org; Mon, 09 Nov 2015 09:49:13 -0500 From: Markus Armbruster References: <1446791754-23823-1-git-send-email-eblake@redhat.com> <1446791754-23823-25-git-send-email-eblake@redhat.com> Date: Mon, 09 Nov 2015 15:49:10 +0100 In-Reply-To: <1446791754-23823-25-git-send-email-eblake@redhat.com> (Eric Blake's message of "Thu, 5 Nov 2015 23:35:48 -0700") Message-ID: <87r3jzdy8p.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v10 24/30] qapi: Factor out QAPISchemaObjectType.check_clash() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: qemu-devel@nongnu.org, Michael Roth Eric Blake writes: > Consolidate two common sequences of clash detection into a > new QAPISchemaObjectType.check_clash() helper method. > > No change to generated code. > > Signed-off-by: Eric Blake > > --- > v10: rebase on new Variants.check_clash() > v9: new patch, split off from v8 7/17 > --- > scripts/qapi.py | 19 ++++++++----------- > 1 file changed, 8 insertions(+), 11 deletions(-) > > diff --git a/scripts/qapi.py b/scripts/qapi.py > index 4c56935..6d8c4c7 100644 > --- a/scripts/qapi.py > +++ b/scripts/qapi.py > @@ -980,11 +980,7 @@ class QAPISchemaObjectType(QAPISchemaType): > seen = OrderedDict() > if self._base_name: > self.base = schema.lookup_type(self._base_name) > - assert isinstance(self.base, QAPISchemaObjectType) > - assert not self.base.variants # not implemented > - self.base.check(schema) > - for m in self.base.members: > - m.check_clash(seen) > + self.base.check_clash(schema, seen) > for m in self.local_members: > m.check(schema) > m.check_clash(seen) > @@ -994,6 +990,12 @@ class QAPISchemaObjectType(QAPISchemaType): > assert self.variants.tag_member in self.members > self.variants.check_clash(schema, seen) > > + def check_clash(self, schema, seen): > + self.check(schema) Do we want to hide this .check() inside .check_clash()? QAPISchemaObjectTypeMember.check() doesn't. I think the two better behave the same. > + assert not self.variants # not implemented > + for m in self.members: > + m.check_clash(seen) > + > def is_implicit(self): > # See QAPISchema._make_implicit_object_type() > return self.name[0] == ':' > @@ -1062,12 +1064,7 @@ class QAPISchemaObjectTypeVariants(object): > for v in self.variants: > # Reset seen map for each variant, since qapi names from one > # branch do not affect another branch > - vseen = dict(seen) > - assert isinstance(v.type, QAPISchemaObjectType) > - assert not v.type.variants # not implemented > - v.type.check(schema) > - for m in v.type.members: > - m.check_clash(vseen) > + v.type.check_clash(schema, dict(seen)) > > > class QAPISchemaObjectTypeVariant(QAPISchemaObjectTypeMember):