qemu-devel
[Top][All Lists]
Advanced

[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?

[...]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]