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

> On 01/30/2018 04:21 AM, Markus Armbruster wrote:
>> The macro expansions of qdict_put_TYPE() and qlist_append_TYPE() need
>> qbool.h, qnull.h, qnum.h and qstring.h to compile.  We include qnull.h
>> and qnum.h in the headers, but not qbool.h and qstring.h.  Works,
>> because we include those wherever the macros get used.
>> 
>> Open-coding these helpers is of dubious value.  Turn them into
>> functions and drop the includes from the headers.
>> 
>> This cleanup makes the number of objects depending on qapi/qmp/qnum.h
>> from 4548 (out of 4739) to 46 in my "build everything" tree.  For
>> qapi/qmp/qnull.h, the number drops from 4549 to 21.
>
> Impressive!
>
>
>> +++ b/qobject/qdict.c
>> @@ -14,6 +14,7 @@
>>  #include "qapi/qmp/qnum.h"
>>  #include "qapi/qmp/qdict.h"
>>  #include "qapi/qmp/qbool.h"
>> +#include "qapi/qmp/qnull.h"
>>  #include "qapi/qmp/qstring.h"
>>  #include "qapi/qmp/qobject.h"
>>  #include "qapi/error.h"
>> @@ -143,6 +144,26 @@ void qdict_put_obj(QDict *qdict, const char *key, 
>> QObject *value)
>>      }
>>  }
>>  
>> +void qdict_put_int(QDict *qdict, const char *key, int64_t value)
>> +{
>> +    qdict_put(qdict, key, qnum_from_int(value));
>> +}
>
> If I'm not mistaken (although I didn't actually test), this triggers a
> false positive in scripts/coccinelle/qobject.cocci, no?  Is there a
> convenient way to tell coccinelle that a rewrite pattern applies
> everywhere except for where the pattern itself is implemented?  But even

I figure it's possible, but too much trouble to be worthwhile.

> if not, we can always use manual inspection when rerunning Coccinelle to
> make sure we don't turn these into infinite loops.

Yup.

> Reviewed-by: Eric Blake <ebl...@redhat.com>

Thanks!

Reply via email to