[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 06/14] qapi-event: Slightly shrink generated code
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v5 06/14] qapi-event: Slightly shrink generated code |
Date: |
Wed, 9 Mar 2016 17:55:27 -0700 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH v5 00/14] easier unboxed visits/qapi implicit types, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 02/14] qapi: Fix command with named empty argument type, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 01/14] qapi: Assert in places where variants are not handled, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 03/14] qapi: Make c_type() more OO-like, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 08/14] qapi-commands: Inline single-use helpers of gen_marshal(), Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 10/14] qapi: Drop unused c_null(), Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 06/14] qapi-event: Slightly shrink generated code,
Eric Blake <=
- [Qemu-devel] [PATCH v5 07/14] qapi: Utilize implicit struct visits, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 12/14] qapi: Make BlockdevOptions doc example closer to reality, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 09/14] qapi: Inline gen_visit_members() into lone caller, Eric Blake, 2016/03/09
- [Qemu-devel] [PATCH v5 05/14] qapi: Emit implicit structs in generated C, Eric Blake, 2016/03/09