qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: marcandre.lureau@redhat.com,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	ehabkost@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type
Date: Fri, 2 Oct 2015 10:57:33 -0600	[thread overview]
Message-ID: <560EB77D.6000704@redhat.com> (raw)
In-Reply-To: <87a8s1p673.fsf@blackfin.pond.sub.org>

[-- Attachment #1: Type: text/plain, Size: 2834 bytes --]

On 10/02/2015 10:48 AM, Markus Armbruster wrote:

>>> Do it the OO-way: QAPISchemaEntity.is_implicit() returns False.  Any
>>> subclass that can have implicitly defined instances overrides it:
>>> QAPISchemaObjectType.is_implicit() tests for ':' prefix,
>>> QAPISchemaEnumType.is_implicit() tests for 'Kind' suffix (requires
>>> outlawing it for user enums, if we don't do it already), and so forth.
>>
>> But there's still the issue of filtering by subclass.  For the
>> qapi-types visit_needed() filter, I either write:
>>
>> if isinstance(entity, QAPISchemaObjectType) and entity.is_implicit()
> 
> If is_implicit() is defined on entities, then this shrinks to just
> 
>     entity.is_implicit()
> 
> because no non-type entity is implicit.

QAPISchemaEnumType is not a subclass of QAPISchemaObjectType, but it can
indeed be implicit (currently depends on whether its name ends in
"Kind").  Right now, the code we generate doesn't care about whether
enums are implicit. But having enum.is_implicit() return False merely
because it is not an ObjectType feels wrong; if anything, we'd want to
name it is_implicit_object() if we are only returning whether an object
is implicit.

> 
>> or what I want to write:
>>
>> if entity.is_implicit(QAPISchemaObjectType)
> 
> I'm not even sure what that's supposed to mean :)

If entity is an implicit ObjectType, return True. If it is implicit but
not an object (such as an implicit enum), or is not implicit (regardless
of whether it is an ObjectType), then return False.

And if you don't need filtering by python type, then
entity.is_implicit() (shorthand for entity.is_implicit(None)) then gives
the correct answer whether entity is ObjectType or EnumType or something
else.

> 
>> while still allowing the common case of is_implicit() when I don't care
>> which type is doing the testing.  Since python doesn't allow method
>> overloads, I'd have to repeat the:
>>
>>     def is_implicit(self, type=None):
>>         if type and not isinstance(self, type):
>>             return False
>>
>> prefix in each subclass that overrides the basic version.
> 
> AH, you seem to propose to define E.is_implicit(T) as "E is implicitly
> defined and not an instance of T".  Why not simply keep the two
> predicates seperate?  Am I missing something?

No, I was thinking E.is_implicit(T) is "E is implicitly defined and IS
an instance of T", while E.is_implicit(None) (the default) doesn't care
about type relations.  To get that semantic, each override of the base
class .is_implicit() has to first filter out all non-T, before going
into its class-specific tests (ObjectType for leading ':', EnumType for
trailing 'Kind').

-- 
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 --]

  reply	other threads:[~2015-10-02 16:57 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-02  4:31 [Qemu-devel] [PATCH v6 00/12] post-introspection cleanups, subset B Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 01/12] qapi: Use predicate callback to determine visit filtering Eric Blake
2015-10-02  6:47   ` Markus Armbruster
2015-10-02 12:16     ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type Eric Blake
2015-10-02  7:02   ` Markus Armbruster
2015-10-02 12:54     ` Eric Blake
2015-10-02 14:12       ` Markus Armbruster
2015-10-02 14:33         ` Eric Blake
2015-10-02 16:48           ` Markus Armbruster
2015-10-02 16:57             ` Eric Blake [this message]
2015-10-02 22:40               ` Eric Blake
2015-10-06  8:32               ` Markus Armbruster
2015-10-06 11:56                 ` Eric Blake
2015-10-06 13:31                   ` Markus Armbruster
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 03/12] qapi: Lazy creation of array types Eric Blake
2015-10-02  8:06   ` Markus Armbruster
2015-10-02 13:05     ` Eric Blake
2015-10-06  8:35       ` Markus Armbruster
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 04/12] qapi: Create simple union type member earlier Eric Blake
2015-10-02  8:34   ` Markus Armbruster
2015-10-02 13:08     ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 05/12] qapi: Track location that created an implicit type Eric Blake
2015-10-02  8:54   ` Markus Armbruster
2015-10-02 14:07     ` Eric Blake
2015-10-02 16:07       ` Markus Armbruster
2015-10-02 16:13         ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 06/12] qapi: Track owner of each object member Eric Blake
2015-10-02  9:50   ` Markus Armbruster
2015-10-02 14:48     ` Eric Blake
2015-10-02 17:05       ` Markus Armbruster
2015-10-02 22:35         ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 07/12] qapi: Detect collisions in C member names Eric Blake
2015-10-02 13:19   ` Markus Armbruster
2015-10-02 15:12     ` Eric Blake
2015-10-02 17:11       ` Markus Armbruster
2015-10-03  1:01         ` Eric Blake
2015-10-06  8:41           ` Markus Armbruster
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 08/12] qapi: Defer duplicate member checks to schema check() Eric Blake
2015-10-02 14:00   ` Markus Armbruster
2015-10-02 15:52     ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 09/12] qapi: Defer duplicate enum value " Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 10/12] qapi: Correct error for union branch 'kind' clash Eric Blake
2015-10-03 17:56   ` Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 11/12] qapi: Detect base class loops Eric Blake
2015-10-02  4:31 ` [Qemu-devel] [PATCH v6 12/12] RFC: qapi: Hide _info member Eric Blake

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=560EB77D.6000704@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /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).