[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v14 09/15] qapi: Shorter visits of optional fields
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v14 09/15] qapi: Shorter visits of optional fields |
Date: |
Tue, 1 Dec 2015 22:20:53 -0700 |
For less code, reflect the determined boolean value of an optional
visit back to the caller instead of making the caller read the
boolean after the fact.
The resulting generated code has the following diff:
|- visit_optional(v, &has_fdset_id, "fdset-id");
|- if (has_fdset_id) {
|+ if (visit_optional(v, &has_fdset_id, "fdset-id")) {
| visit_type_int(v, &fdset_id, "fdset-id", &err);
| if (err) {
| goto out;
| }
| }
Signed-off-by: Eric Blake <address@hidden>
---
v14: no change
v13: no change
v12: split error removal from 'if' compression
v11 (no v10): no change
v9: no change
v8: no change
v7: rebase to no member.c_name()
v6: rebase onto earlier testsuite and gen_err_check() improvements
---
include/qapi/visitor.h | 4 ++--
qapi/qapi-visit-core.c | 3 ++-
scripts/qapi.py | 3 +--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h
index 9be60d4..a14a16d 100644
--- a/include/qapi/visitor.h
+++ b/include/qapi/visitor.h
@@ -41,9 +41,9 @@ void visit_end_list(Visitor *v, Error **errp);
* Check if an optional member @name of an object needs visiting.
* For input visitors, set address@hidden according to whether the
* corresponding visit_type_*() needs calling; for other visitors,
- * leave address@hidden unchanged.
+ * leave address@hidden unchanged. Return address@hidden for convenience.
*/
-void visit_optional(Visitor *v, bool *present, const char *name);
+bool visit_optional(Visitor *v, bool *present, const char *name);
/**
* Determine the qtype of the item @name in the current object visit.
diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c
index e07d6f9..6d63e40 100644
--- a/qapi/qapi-visit-core.c
+++ b/qapi/qapi-visit-core.c
@@ -73,11 +73,12 @@ void visit_end_union(Visitor *v, bool data_present, Error
**errp)
}
}
-void visit_optional(Visitor *v, bool *present, const char *name)
+bool visit_optional(Visitor *v, bool *present, const char *name)
{
if (v->optional) {
v->optional(v, present, name);
}
+ return *present;
}
void visit_get_next_type(Visitor *v, QType *type, bool promote_int,
diff --git a/scripts/qapi.py b/scripts/qapi.py
index fe76a6e..085455b 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1655,8 +1655,7 @@ def gen_visit_fields(members, prefix='', need_cast=False,
skiperr=False):
for memb in members:
if memb.optional:
ret += mcgen('''
- visit_optional(v, &%(prefix)shas_%(c_name)s, "%(name)s");
- if (%(prefix)shas_%(c_name)s) {
+ if (visit_optional(v, &%(prefix)shas_%(c_name)s, "%(name)s")) {
''',
prefix=prefix, c_name=c_name(memb.name),
name=memb.name, errp=errparg)
--
2.4.3
- [Qemu-devel] [PATCH v14 00/15] qapi member collision (post-introspection cleanups, subset D), Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 05/15] qapi-types: Drop unnedeed ._fwdefn, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 06/15] qapi: Inline _make_implicit_tag(), Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 01/15] qobject: Simplify QObject, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 07/15] qapi: Fix alternates that accept 'number' but not 'int', Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 09/15] qapi: Shorter visits of optional fields,
Eric Blake <=
- [Qemu-devel] [PATCH v14 02/15] qobject: Rename qtype_code to QType, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 10/15] qapi: Prepare new QAPISchemaMember base class, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 03/15] qapi: Convert QType into QAPI built-in enum type, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 08/15] qapi: Simplify visits of optional fields, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 11/15] qapi: Track enum values by QAPISchemaMember, not string, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 15/15] qapi: Detect base class loops, Eric Blake, 2015/12/02
- [Qemu-devel] [PATCH v14 13/15] qapi: Enforce (or whitelist) case conventions on qapi members, Eric Blake, 2015/12/02