[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event use of qapi
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event use of qapi visitor |
Date: |
Mon, 21 Dec 2015 10:08:12 -0700 |
All other successful clients of visit_start_struct() were paired
with an unconditional visit_end_struct(); but the generated
code for events was relying on qmp_output_visitor_cleanup() to
work on an incomplete visit. Alter the code to guarantee that
the struct is completed, which will make a future patch to
split visit_end_struct() easier to reason about. While at it,
drop some assertions and comments that are not present in other
uses of the qmp output visitor, rearrange the declaration to
make it easier for a future patch to introduce the notion of
a boxed event visit, and pass NULL rather than "" as the 'kind'
parameter (matching most other uses where obj is NULL).
Signed-off-by: Eric Blake <address@hidden>
---
v8: no change
v7: place earlier in series, adjust handling of 'kind'
v6: new patch
If desired, I can defer the hunk re-ordering the declaration of
obj to later in the series where it actually comes in handy.
---
scripts/qapi-event.py | 14 ++++++--------
scripts/qapi.py | 5 +++--
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
index 720486f..e37c07a 100644
--- a/scripts/qapi-event.py
+++ b/scripts/qapi-event.py
@@ -41,9 +41,9 @@ def gen_event_send(name, arg_type):
if arg_type and arg_type.members:
ret += mcgen('''
+ QObject *obj;
QmpOutputVisitor *qov;
Visitor *v;
- QObject *obj;
''')
@@ -61,25 +61,23 @@ def gen_event_send(name, arg_type):
if arg_type and arg_type.members:
ret += mcgen('''
qov = qmp_output_visitor_new();
- g_assert(qov);
-
v = qmp_output_get_visitor(qov);
- g_assert(v);
- /* Fake visit, as if all members are under a structure */
- visit_start_struct(v, NULL, "", "%(name)s", 0, &err);
+ visit_start_struct(v, NULL, NULL, "%(name)s", 0, &err);
''',
name=name)
ret += gen_err_check()
- ret += gen_visit_fields(arg_type.members, need_cast=True)
+ ret += gen_visit_fields(arg_type.members, need_cast=True,
+ label='out_obj')
ret += mcgen('''
+out_obj:
visit_end_struct(v, &err);
if (err) {
goto out;
}
obj = qmp_output_get_qobject(qov);
- g_assert(obj != NULL);
+ g_assert(obj);
qdict_put_obj(qmp, "data", obj);
''')
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 7dec611..497eaba 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1636,7 +1636,8 @@ def gen_err_check(label='out', skiperr=False):
label=label)
-def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
+def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False,
+ label='out'):
ret = ''
if skiperr:
errparg = 'NULL'
@@ -1664,7 +1665,7 @@ def gen_visit_fields(members, prefix='', need_cast=False,
skiperr=False):
c_type=memb.type.c_name(), prefix=prefix, cast=cast,
c_name=c_name(memb.name), name=memb.name,
errp=errparg)
- ret += gen_err_check(skiperr=skiperr)
+ ret += gen_err_check(skiperr=skiperr, label=label)
if memb.optional:
pop_indent()
--
2.4.3
- [Qemu-devel] [PATCH v8 03/35] qapi: Drop dead dealloc visitor variable, (continued)
- [Qemu-devel] [PATCH v8 03/35] qapi: Drop dead dealloc visitor variable, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 05/35] vl: Improve use of qapi visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 06/35] balloon: Improve use of qapi visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 12/35] qapi: Don't cast Enum* to int*, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 08/35] qapi: Track all failures between visit_start/stop, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 04/35] hmp: Improve use of qapi visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 02/35] qapi: Avoid use of misnamed DO_UPCAST(), Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 09/35] qapi: Prefer type_int64 over type_int in visitors, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 10/35] qapi: Make all visitors supply uint64 callbacks, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 11/35] qapi: Consolidate visitor small integer callbacks, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event use of qapi visitor,
Eric Blake <=
- [Qemu-devel] [PATCH v8 17/35] qapi: Drop unused 'kind' for struct/enum visit, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 13/35] qom: Use typedef for Visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 20/35] qmp: Don't abuse stack to track qmp-output root, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 27/35] qapi: Fix command with named empty argument type, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our number handling, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 22/35] qapi: Add visit_type_null() visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 25/35] qapi: Simplify excess input reporting in input visitors, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 19/35] qmp: Fix reference-counting of qnull on empty output visit, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 21/35] qapi: Document visitor interfaces, add assertions, Eric Blake, 2015/12/21