qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 11/49] qapi/commands: add #if conditions to c


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v3 11/49] qapi/commands: add #if conditions to commands
Date: Mon, 25 Jun 2018 15:15:30 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Markus Armbruster <address@hidden> writes:

> Marc-André Lureau <address@hidden> writes:
>
>> Wrap generated code with #if/#endif using an 'ifcontext' on
>> QAPIGenCSnippet objects.
>>
>> Signed-off-by: Marc-André Lureau <address@hidden>
>> ---
>>  scripts/qapi/commands.py | 19 ++++++++++---------
>>  tests/test-qmp-cmds.c    |  4 ++--
>>  2 files changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
>> index e2366b4801..40bb680b7c 100644
>> --- a/scripts/qapi/commands.py
>> +++ b/scripts/qapi/commands.py
>> @@ -237,7 +237,7 @@ class 
>> QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
>>          QAPISchemaModularCVisitor.__init__(
>>              self, prefix, 'qapi-commands',
>>              ' * Schema-defined QAPI/QMP commands', __doc__)
>> -        self._regy = ''
>> +        self._regy = QAPIGenCSnippet()
>>          self._visited_ret_types = {}
>>  
>>      def _begin_module(self, name):
>> @@ -273,19 +273,20 @@ class 
>> QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
>>  void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
>>  ''',
>>                         c_prefix=c_name(self._prefix, protect=False)))
>> -        genc.add(gen_registry(self._regy, self._prefix))
>> +        genc.add(gen_registry(self._regy.get_content(), self._prefix))
>>  
>>      def visit_command(self, name, info, ifcond, arg_type, ret_type,
>>                        gen, success_response, boxed, allow_oob):
>>          if not gen:
>>              return
>> -        self._genh.add(gen_command_decl(name, arg_type, boxed, ret_type))
>> -        if ret_type and ret_type not in self._visited_ret_types[self._genc]:
>> -            self._visited_ret_types[self._genc].add(ret_type)
>> -            self._genc.add(gen_marshal_output(ret_type))
>> -        self._genh.add(gen_marshal_decl(name))
>> -        self._genc.add(gen_marshal(name, arg_type, boxed, ret_type))
>> -        self._regy += gen_register_command(name, success_response, 
>> allow_oob)
>> +        with ifcontext(ifcond, self._genh, self._genc, self._regy):
>> +            self._genh.add(gen_command_decl(name, arg_type, boxed, 
>> ret_type))
>> +            if ret_type and ret_type not in 
>> self._visited_ret_types[self._genc]:
>> +                self._visited_ret_types[self._genc].add(ret_type)
>> +                self._genc.add(gen_marshal_output(ret_type))
>
> I'm afraid this falls apart when multiple commands with different
> conditions share a return type.

If you'd rather fix this later, we can consider just documenting the bug
for now.

> That case needs test coverage.

Needed regardless.

[...]



reply via email to

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