[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 06/14] qapi-event: Slightly shrink generated
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v5 06/14] qapi-event: Slightly shrink generated code |
Date: |
Wed, 16 Mar 2016 15:41:21 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> 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.
I think this should go into the next patch, where we actually fix the
same collision in command marshallers.
> |@@ -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:
This is actually two separate simplifications. One is initializing emit
instead of assigning to it:
> |@@ -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();
I'm afraid I don't like it, because it separates
qmp_event_get_func_emit() from its check.
A more likable simplification would be dropping the indirection
outright: emit is always monitor_qapi_event_queue(), except in
test-qmp-event. That's a rather weak excuse for complicating things
with an indirection. Let's not upset this series with it, though.
The other simplification is burying the dead check of
qmp_output_get_qobject()'s value:
> |@@ -25,16 +25,13 @@ void qapi_event_send_acpi_device_ost(ACP
> | {
> | QDict *qmp;
> | Error *err = NULL;
> | QMPEventFuncEmit emit;
> | QmpOutputVisitor *qov;
> | Visitor *v;
> |- QObject *obj;
> |
> | emit = qmp_event_get_func_emit();
> |@@ -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:
Yes, please.
Patch shrinks to just this:
>From bfaa962b04f5365289c46dadb0c078a13d52eae8 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Wed, 9 Mar 2016 17:55:27 -0700
Subject: [PATCH 06/14] qapi-event: Drop qmp_output_get_qobject() null check
qmp_output_get_qobject() was changed never to return null some time
ago, but the qapi_event_send_FOO() functions still check. Clean that
up:
|@@ -28,7 +28,6 @@ void qapi_event_send_acpi_device_ost(ACP
| QMPEventFuncEmit emit;
| QmpOutputVisitor *qov;
| Visitor *v;
|- QObject *obj;
|
| emit = qmp_event_get_func_emit();
| if (!emit) {
|@@ -54,10 +53,7 @@ out_obj:
| 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>
---
scripts/qapi-event.py | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
index c03cb78..27af206 100644
--- a/scripts/qapi-event.py
+++ b/scripts/qapi-event.py
@@ -43,7 +43,6 @@ def gen_event_send(name, arg_type):
ret += mcgen('''
QmpOutputVisitor *qov;
Visitor *v;
- QObject *obj;
''')
@@ -77,10 +76,7 @@ out_obj:
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.4.3
- [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, 2016/03/09
- [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
- [Qemu-devel] [PATCH v5 04/14] qapi: Adjust names of implicit types, Eric Blake, 2016/03/09