qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v6 09/15] qapi-introspect: add preprocessor cond


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v6 09/15] qapi-introspect: add preprocessor conditions to generated QLit
Date: Tue, 03 Jul 2018 15:47:42 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Marc-André Lureau <address@hidden> writes:

> Hi
>
> On Tue, Jul 3, 2018 at 2:09 PM, Markus Armbruster <address@hidden> wrote:
>> Marc-André Lureau <address@hidden> writes:
>>
>>> The generator will take (obj, condition) tuples to wrap generated QLit
>>> objects for 'obj' with #if/#endif conditions.
>>>
>>> This commit adds 'ifcond' condition to top-level QLit objects.
>>>
>>> See generated tests/test-qmp-introspect.c. Example diff after this patch:
>>>
>>>     --- before        2018-01-08 11:55:24.757083654 +0100
>>>     +++ tests/test-qmp-introspect.c   2018-01-08 13:08:44.477641629 +0100
>>>     @@ -51,6 +51,8 @@
>>>              { "name", QLIT_QSTR("EVENT_F"), },
>>>              {}
>>>          })),
>>>     +#if defined(TEST_IF_CMD)
>>>     +#if defined(TEST_IF_STRUCT)
>>>          QLIT_QDICT(((QLitDictEntry[]) {
>>>              { "arg-type", QLIT_QSTR("5"), },
>>>              { "meta-type", QLIT_QSTR("command"), },
>>>     @@ -58,12 +60,16 @@
>>>              { "ret-type", QLIT_QSTR("0"), },
>>>              {}
>>>          })),
>>>     +#endif /* defined(TEST_IF_STRUCT) */
>>>     +#endif /* defined(TEST_IF_CMD) */
>>>
>>> Signed-off-by: Marc-André Lureau <address@hidden>
>>> ---
>>>  scripts/qapi/introspect.py | 31 +++++++++++++++++++++----------
>>>  1 file changed, 21 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py
>>> index bd7e1219be..71d4a779ce 100644
>>> --- a/scripts/qapi/introspect.py
>>> +++ b/scripts/qapi/introspect.py
>>> @@ -18,6 +18,15 @@ def to_qlit(obj, level=0, suppress_first_indent=False):
>>>      def indent(level):
>>>          return level * 4 * ' '
>>>
>>> +    if isinstance(obj, tuple):
>>> +        ifobj, ifcond = obj
>>> +        ret = gen_if(ifcond)
>>> +        ret += to_qlit(ifobj, level)
>>> +        endif = gen_endif(ifcond)
>>> +        if endif:
>>> +            ret += '\n' + endif
>>> +        return ret
>>> +
>>>      ret = ''
>>>      if not suppress_first_indent:
>>>          ret += indent(level)
>>
>> @obj represents a JSON object.  It consists of dictionaries, lists,
>> strings, booleans and None.  Numbers aren't implemented.  Your patch
>> splices in tuples to represent conditionals at any level.
>>
>> So far, tuples occur only as elements of the outermost list (see
>> ._gen_qlit() below), but to_qlit() supports them anywhere.  I figure
>> that will be needed later.  Can you point me to such a later use?
>
> It's added in the introspect.py part from "qapi: add #if conditions to
> generated code members"

Thanks!

Let's add a hint to the commit message.  Pergaps:

    qapi-introspect: add preprocessor conditions to generated QLit

    This commit adds 'ifcond' conditions to top-level QLit objects.
    Future work will add them to object and enum type members, i.e. within
    QLit objects.

    Extend the QLit generator to_qlit() to accept (@obj, @cond) tuples in
    addition to just @obj.  The tuple causes the QLit generated for
    objects for @obj with #if/#endif conditions for @cond.

    See generated tests/test-qmp-introspect.c.  Example diff after this
    patch:
    [...]



reply via email to

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