Slightly rearrange the code in gen_event_send() for less generated output, by initializing 'emit' sooner, deferring an assertion to qdict_put_obj, and dropping a now-unused 'obj' local variable.
While at it, document a FIXME related to the potential for a compiler naming collision - if the user ever creates a QAPI event whose name matches 'errp' or one of our local variables (like 'emit'), we'll have to revisit how we generate functions to avoid the problem. |@@ -25,16 +25,13 @@ void qapi_event_send_acpi_device_ost(ACP | { | QDict *qmp; | Error *err = NULL; |- QMPEventFuncEmit emit; |+ QMPEventFuncEmit emit = qmp_event_get_func_emit(); | QmpOutputVisitor *qov; | Visitor *v; |- QObject *obj; | |- emit = qmp_event_get_func_emit(); | if (!emit) { | return; | } |- | qmp = qmp_event_build_dict("ACPI_DEVICE_OST"); | | qov = qmp_output_visitor_new(); |@@ -53,11 +50,7 @@ out_obj: | if (err) { | goto out; | } |- |- obj = qmp_output_get_qobject(qov); |- g_assert(obj); |- |- qdict_put_obj(qmp, "data", obj); |+ qdict_put_obj(qmp, "data", qmp_output_get_qobject(qov)); | emit(QAPI_EVENT_ACPI_DEVICE_OST, qmp, &err); | | out: Signed-off-by: Eric Blake <ebl...@redhat.com> --- v5: new patch --- scripts/qapi-event.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py index c03cb78..02c9556 100644 --- a/scripts/qapi-event.py +++ b/scripts/qapi-event.py @@ -29,13 +29,19 @@ def gen_event_send_decl(name, arg_type): def gen_event_send(name, arg_type): + # FIXME: Our declaration of local variables (and of 'errp' in the + # parameter list) can collide with exploded members of the event's + # data type passed in as parameters. If this collision ever hits in + # practice, we can rename our local variables with a leading _ prefix, + # or split the code into a wrapper function that creates a boxed + # 'param' object then calls another to do the real work. ret = mcgen(''' %(proto)s { QDict *qmp; Error *err = NULL; - QMPEventFuncEmit emit; + QMPEventFuncEmit emit = qmp_event_get_func_emit(); ''', proto=gen_event_send_proto(name, arg_type)) @@ -43,16 +49,13 @@ def gen_event_send(name, arg_type): ret += mcgen(''' QmpOutputVisitor *qov; Visitor *v; - QObject *obj; - ''') ret += mcgen(''' - emit = qmp_event_get_func_emit(); + if (!emit) { return; } - qmp = qmp_event_build_dict("%(name)s"); ''', @@ -76,11 +79,7 @@ out_obj: if (err) { goto out; } - - obj = qmp_output_get_qobject(qov); - g_assert(obj); - - qdict_put_obj(qmp, "data", obj); + qdict_put_obj(qmp, "data", qmp_output_get_qobject(qov)); ''') ret += mcgen(''' -- 2.5.0