[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of imp
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type |
Date: |
Fri, 02 Oct 2015 18:48:32 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> On 10/02/2015 08:12 AM, Markus Armbruster wrote:
>
>>> Actually, this only works for implicit objects. Implicit enums instead
>>> have self.name[-4:] == 'Kind'. But qapi-types cares about implicit
>>> objects only. So if I hoist this, I may need something like:
>>>
>>> def is_implicit(self, type=None):
>>> if type and not isinstance(self, type):
>>> return Fals
>>> if isinstance(self, QAPISchemaObjectType):
>>> return self.name[0] == ':'
>>> if isinstance(self, QAPISchemaEnumType):
>>> return self.name[-4:] == 'Kind'
>>> return False
>>>
>>> where qapi-types would call entity.is_implicit(QAPISchemaObjectType).
>>
>> 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.
> or what I want to write:
>
> if entity.is_implicit(QAPISchemaObjectType)
I'm not even sure what that's supposed to mean :)
> 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?
[...]
- [Qemu-devel] [PATCH v6 06/12] qapi: Track owner of each object member, (continued)
[Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Markus Armbruster, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Markus Armbruster, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type,
Markus Armbruster <=
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Markus Armbruster, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
- Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Markus Armbruster, 2015/10/08
Re: [Qemu-devel] [PATCH v6 02/12] qapi: Don't use info as witness of implicit object type, Eric Blake, 2015/10/08
[Qemu-devel] [PATCH v6 05/12] qapi: Track location that created an implicit type, Eric Blake, 2015/10/08