From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57251) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WGqbw-0004rj-AC for qemu-devel@nongnu.org; Fri, 21 Feb 2014 08:57:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WGqbq-0006x4-Je for qemu-devel@nongnu.org; Fri, 21 Feb 2014 08:57:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58669) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WGqbq-0006wI-Ai for qemu-devel@nongnu.org; Fri, 21 Feb 2014 08:57:46 -0500 Message-ID: <53075B19.8010004@redhat.com> Date: Fri, 21 Feb 2014 06:56:41 -0700 From: Eric Blake MIME-Version: 1.0 References: <1392875695-15627-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1392875695-15627-8-git-send-email-xiawenc@linux.vnet.ibm.com> <87a9dlwxh9.fsf@blackfin.pond.sub.org> <53069B34.2060006@linux.vnet.ibm.com> <871tywrihg.fsf@blackfin.pond.sub.org> In-Reply-To: <871tywrihg.fsf@blackfin.pond.sub.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="1Fq4KQ4AfwDRQ3WfMc5rkS72R9eoVCN0R" Subject: Re: [Qemu-devel] [PATCH V7 07/11] qapi script: support pre-defined enum type as discriminator in union List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster , Wenchao Xia Cc: kwolf@redhat.com, mdroth@linux.vnet.ibm.com, qemu-devel@nongnu.org, lcapitulino@redhat.com This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --1Fq4KQ4AfwDRQ3WfMc5rkS72R9eoVCN0R Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 02/21/2014 01:13 AM, Markus Armbruster wrote: >>> I guess you move this into its own loop because when base types are u= sed >>> before they're defined, or an enum type is used for a discriminator >>> before it's defined, then discriminator_find_enum_define() complains.= >>> Correct? >>> >> Exactly, which allow enum define after usage in schema. >=20 > Do we want to (have to?) support "use before define" in schemas? Eric,= > what do you think? Topological sorting is a nice goal; and unfortunately not possible in qapi because we already have recursive types. We already have to support use before define in schemas. But it still seems like a two-pass parse is sufficient - in pass one, read all types, but without paying attention to their contents; in pass two, resolve all types in the order that they are encountered. Enums are not recursive, so it will always possible to resolve an enum before resolving the base class of a union, even if the enum definition occurred later than the union type that is using the enum as its discriminator. Now, just because we have to support use-before-define of recursive types does not necessarily mean that we have to support use-before-define of enums. Since enums are inherently not recursive, it might be okay to state that any use of a discriminator must be after the enum has already been declared. But for consistency, I think supporting use-before-define is nicer; I also think there may come a day where the schema file is so large that it would pay to do a one-time sort and make all further insertions in alphabetical order (to make it easier to find a given type name) - and I do not want to enforce that enum types must sort lexicographically before any client using it as a discriminator. >=20 > If yes, we should add suitable tests. Outside the scope of this series= =2E Here, I agree - whether you enforce define-before-use for now, or plan on supporting use-before-define, you need a test of an enum after the union type to ensure that it either gives a sane error message or does the right action. I actually think adding such a test IS part of the scope of this series, as this is the series adding support for an enum discriminator in the first place. --=20 Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --1Fq4KQ4AfwDRQ3WfMc5rkS72R9eoVCN0R Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Public key at http://people.redhat.com/eblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCAAGBQJTB1saAAoJEKeha0olJ0NqcegIAKpLwdhd9lT7qs6T2xyDPkMZ oKWljH58QAUf41kJo3GlCx1iOy/yN8s82I+2RXKKO3fY8s+KOZUrxvbUJ0zPuZ4j QRdfzx8l3DliDyJopjg6p8Q/vk7tgFZodVGF8mMYzWkaqvPdyGdGQLzfhniQw9nf 9kYFGek9vzjVlgIwxnJQe8wdisalroKtgOQoT1graHgon8PIiUk6aRbnWTXVWKNK 6CN336je5bcgdhTJflazRQHW67+Q1lH07VsT1xB7Ylsp62UP3HFum5F8inNTlhIq kQf863yvE3XL5QMo8TQ9/VFpb+YQFcYXmIFB8i5bq+HWYZpuk2BJEVePFDRd/o4= =t557 -----END PGP SIGNATURE----- --1Fq4KQ4AfwDRQ3WfMc5rkS72R9eoVCN0R--