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

> On 02/11/2018 03:35 AM, Markus Armbruster wrote:
>> The include directive permits modular QAPI schemata, but the generated
>> code is monolithic all the same.  To permit generating modular code,
>> the front end needs to pass more information on inclusions to the back
>> ends.  The commit before last added the necessary information to the
>> parse tree.  This commit adds it to the intermediate representation
>> and its QAPISchemaVisitor.  A later commit will use this to to
>> generate modular code.
>>
>> New entity QAPISchemaInclude represents inclusions.  Call new visitor
>> method visit_include() for it, so visitors can see the sub-modules a
>> module includes.
>>
>> Note that unlike other entities, QAPISchemaInclude has no name, and is
>> therefore not added to entity_dict.
>>
>> New QAPISchemaEntity attribute @module names the entity's source file.
>> Call new visitor method visit_module() when it changes during a visit,
>> so visitors can keep track of the module being visited.
>>
>> Signed-off-by: Markus Armbruster <arm...@redhat.com>
>> Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com>
>> ---
>> @@ -1479,16 +1497,19 @@ class QAPISchema(object):
>>           self._entity_dict = {}
>>           self._predefining = True
>>           self._def_predefineds()
>> -        self._predefining = False
>>           self._def_exprs(exprs)
>>           self.check()
>
> Why does self._predfining not need to be toggled anymore?  Do we even
> need this variable any more...
>
>>
>>      def _def_entity(self, ent):
>>          # Only the predefined types are allowed to not have info
>>          assert ent.info or self._predefining
>> -        assert ent.name not in self._entity_dict
>
> ...and/or is this assert now worthless?
>
>
>> +++ b/tests/qapi-schema/comments.out
>> @@ -1,4 +1,5 @@
>>   object q_empty
>>   enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>>       prefix QTYPE
>> +module comments.json
>>   enum Status ['good', 'bad', 'ugly']
>
> Based on the generated output, it looks like you can tell whether you
> are in the predefining stage by not having any module at all; the
> first visit_module call is what flips the switch that everything else
> is defined by a module and must therefore have associated info.

Editing accident.  I started down the road you described, decided I lack
the time to reach its end, then failed to back out completely.

Reply via email to