Eric Blake <ebl...@redhat.com> writes:

> On 9/14/19 10:35 AM, Markus Armbruster wrote:
>> Entity checking goes back to commit ac88219a6c "qapi: New QAPISchema
>> intermediate representation", v2.5.0.  It's designed to work as
>> follows: QAPISchema.check() calls .check() for all the schema's
>> entities.  An entity's .check() recurses into another entity's
>> .check() only if the C struct generated for the former contains the C
>> struct generated for the latter (pointers don't count).  This is used
>> to detect "object contains itself".
>> 
>> There are two instances of this:
>> 
>> * An object's C struct contains its base's C struct
>> 
>>   QAPISchemaObjectType.check() calls self.base.check()
>> 
>> * An object's C struct contains its variants' C structs
>> 
>>   QAPISchemaObjectTypeVariants().check calls v.type.check().  Since
>>   commit b807a1e1e3 "qapi: Check for QAPI collisions involving variant
>>   members", v2.6.0.
>> 
>
>> Sadly, this design has since eroded:
>> 
>
>> * A QAPISchemaEntity's .module becomes valid at .check().  This is
>>   because computing it needs info and schema.fname, and because array
>>   types get it from their element type instead.
>> 
>>   Make it a property  just like .ifcond.
>
> Extra space.

Will fix.

>> Additionally, have QAPISchemaEntity.check() assert it gets called at
>> most once, so the design invariant will stick this time.  Neglecting
>> that was entirely my fault.
>
> Lengthy explanation, but it makes sense.

Writing the commit message was more work than writing the patch...

>> 
>> Signed-off-by: Markus Armbruster <arm...@redhat.com>
>> ---
>>  scripts/qapi/common.py | 74 +++++++++++++++++++++++++++++-------------
>>  1 file changed, 52 insertions(+), 22 deletions(-)
>> 
>
> Took me a bit longer to read this (and refresh myself on what
> '@property' actually does in Python, but you're not the first user of it
> in qemu), but it matches the commit message.
>
> Reviewed-by: Eric Blake <ebl...@redhat.com>

Thanks!

Reply via email to