From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>,
Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, mdroth@linux.vnet.ibm.com,
qemu-devel@nongnu.org, lcapitulino@redhat.com
Subject: Re: [Qemu-devel] [PATCH V7 07/11] qapi script: support pre-defined enum type as discriminator in union
Date: Fri, 21 Feb 2014 06:56:41 -0700 [thread overview]
Message-ID: <53075B19.8010004@redhat.com> (raw)
In-Reply-To: <871tywrihg.fsf@blackfin.pond.sub.org>
[-- Attachment #1: Type: text/plain, Size: 2378 bytes --]
On 02/21/2014 01:13 AM, Markus Armbruster wrote:
>>> I guess you move this into its own loop because when base types are used
>>> 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.
>
> 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.
>
> If yes, we should add suitable tests. Outside the scope of this series.
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.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2014-02-21 13:57 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-20 5:54 [Qemu-devel] [PATCH V7 00/11] qapi script: support enum as discriminator and better enum name Wenchao Xia
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 01/11] qapi script: remember enum values Wenchao Xia
2014-02-20 12:05 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 02/11] qapi script: add check for duplicated key Wenchao Xia
2014-02-20 12:05 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 03/11] qapi-script: remember line number in schema parsing Wenchao Xia
2014-02-20 12:22 ` Markus Armbruster
2014-02-21 0:10 ` Wenchao Xia
2014-02-21 13:04 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 04/11] qapi script: check correctness of discriminator values in union Wenchao Xia
2014-02-20 14:43 ` Markus Armbruster
2014-02-20 15:26 ` Eric Blake
2014-02-21 8:21 ` Markus Armbruster
2014-02-21 13:49 ` Eric Blake
2014-02-21 14:08 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 05/11] qapi script: code move for generate_enum_name() Wenchao Xia
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 06/11] qapi script: use same function to generate enum string Wenchao Xia
2014-02-20 15:20 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 07/11] qapi script: support pre-defined enum type as discriminator in union Wenchao Xia
2014-02-20 16:38 ` Markus Armbruster
2014-02-21 0:17 ` Wenchao Xia
2014-02-21 8:13 ` Markus Armbruster
2014-02-21 13:56 ` Eric Blake [this message]
2014-02-21 14:39 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 08/11] qapi: convert BlockdevOptions to use enum discriminator Wenchao Xia
2014-02-20 17:59 ` Eric Blake
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 09/11] qapi script: do not allow string discriminator Wenchao Xia
2014-02-20 16:50 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 10/11] qapi script: do not add "_" for every capitalized char in enum Wenchao Xia
2014-02-20 16:54 ` Markus Armbruster
2014-02-20 17:53 ` Eric Blake
2014-02-21 8:21 ` Markus Armbruster
2014-02-20 5:54 ` [Qemu-devel] [PATCH V7 11/11] qapi test: add error path test for union Wenchao Xia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53075B19.8010004@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=xiawenc@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).