[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visi
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visit_members_call() |
Date: |
Thu, 25 Feb 2016 16:38:44 -0700 |
When first introduced, neither branch of gen_visit_members_call()
would output a goto. But now that the implicit struct visit
always ends with a goto, we should do the same for regular
struct visits, so that callers don't have to worry about whether
they are creating two identical goto's in a row.
Generated code gets slightly larger; if desired, we could patch
qapi.py:gen_visit_members() to have a mode where it skips the
final goto and leave it up to the callers when to use that mode,
but that adds more maintenance burden when the compiler should
be smart enough to not bloat the .o file just because the .c
file got larger.
Signed-off-by: Eric Blake <address@hidden>
---
v2: rebase onto s/fields/members/ change
---
scripts/qapi-visit.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index e281d21..a17ecc1 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -48,6 +48,7 @@ def gen_visit_members_call(typ, direct_name,
implicit_name=None):
visit_type_%(c_type)s_members(v, %(c_name)s, &err);
''',
c_type=typ.c_name(), c_name=direct_name)
+ ret += gen_err_check()
return ret
@@ -63,7 +64,6 @@ void visit_type_%(c_name)s_members(Visitor *v, %(c_name)s
*obj, Error **errp)
if base:
ret += gen_visit_members_call(base, '(%s *)obj' % base.c_name())
- ret += gen_err_check()
ret += gen_visit_members(members, prefix='obj->')
@@ -95,9 +95,9 @@ void visit_type_%(c_name)s_members(Visitor *v, %(c_name)s
*obj, Error **errp)
}
''')
- # 'goto out' produced for base, by gen_visit_members() for each member,
- # and if variants were present
- if base or members or variants:
+ # 'goto out' produced for non-empty base, by gen_visit_members() for
+ # each member, and if variants were present
+ if (base and not base.is_empty()) or members or variants:
ret += mcgen('''
out:
--
2.5.0
- [Qemu-devel] [PATCH v2 03/19] qapi: Update docs to match recent generator changes, (continued)
- [Qemu-devel] [PATCH v2 03/19] qapi: Update docs to match recent generator changes, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 06/19] ui: Shorten references into InputEvent, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 10/19] qapi-visit: Factor out gen_visit_members_call(), Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 07/19] qapi: Avoid use of 'data' member of qapi unions, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 08/19] chardev: Drop useless ChardevDummy type, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 09/19] qapi: Drop useless 'data' member of unions, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 05/19] util: Shorten references into SocketAddress, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 12/19] qapi: Fix command with named empty argument type, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 13/19] qapi-visit: Simplify visit of empty branch in union, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 11/19] qapi: Add type.is_empty() helper, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visit_members_call(),
Eric Blake <=
- [Qemu-devel] [PATCH v2 16/19] qapi: Allow anonymous base for flat union, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 19/19] qapi: Make c_type() more OO-like, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 17/19] qapi: Use anonymous base in SchemaInfo, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 18/19] qapi: Use anonymous base in CpuInfo, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 14/19] qapi: Don't special-case simple union wrappers, Eric Blake, 2016/02/25