[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 35/40] qapi: Shorter visits of optional fields
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 35/40] qapi: Shorter visits of optional fields |
Date: |
Thu, 17 Dec 2015 09:33:40 +0100 |
From: Eric Blake <address@hidden>
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>
Message-Id: <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
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 8bf41db..58ecdf2 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1656,8 +1656,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] [PULL 08/40] qapi: Eliminate QAPISchemaObjectType.check() variable members, (continued)
- [Qemu-devel] [PULL 08/40] qapi: Eliminate QAPISchemaObjectType.check() variable members, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 13/40] qapi: Hoist tag collision check to Variants.check(), Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 21/40] qapi: Tighten the regex on valid names, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 23/40] qapi: Remove obsolete tests for MAX collision, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 31/40] qapi-types: Drop unnedeed ._fwdefn, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 11/40] qapi: Check for QAPI collisions involving variant members, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 20/40] blkdebug: Avoid '.' in enum values, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 16/40] qapi: Detect collisions in C member names, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 15/40] qapi: Track owner of each object member, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 28/40] qobject: Rename qtype_code to QType, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 35/40] qapi: Shorter visits of optional fields,
Markus Armbruster <=
- [Qemu-devel] [PULL 34/40] qapi: Simplify visits of optional fields, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 27/40] qobject: Simplify QObject, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 39/40] qapi: Move duplicate collision checks to schema check(), Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 29/40] qapi: Convert QType into QAPI built-in enum type, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 37/40] qapi: Track enum values by QAPISchemaMember, not string, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 40/40] qapi: Detect base class loops, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 33/40] qapi: Fix alternates that accept 'number' but not 'int', Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 38/40] qapi: Enforce (or whitelist) case conventions on qapi members, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 22/40] qapi: Don't let implicit enum MAX member collide, Markus Armbruster, 2015/12/17
- [Qemu-devel] [PULL 26/40] qapi: Change munging of CamelCase enum values, Markus Armbruster, 2015/12/17