[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v11 03/24] qapi: More robust conditions for when lab
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v11 03/24] qapi: More robust conditions for when labels are needed |
Date: |
Mon, 26 Oct 2015 16:34:42 -0600 |
We were using regular expressions to see if ret included
any earlier text that emitted a 'goto out;' line, to decide
whether we needed to output an 'out:' label. But this is
fragile, if the ret text can possibly combine more than one
generated function body, where the first function used a
goto but the second does not. Change the code to just check
for the known conditions which cause an error check to be
needed. Besides, it's slightly more efficient to use plain
checks than regular expression searching.
No change to generated code.
Signed-off-by: Eric Blake <address@hidden>
---
v11: add comments
v10: new patch, split in part from 6/17
---
scripts/qapi-commands.py | 4 +++-
scripts/qapi-visit.py | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index 43a893b..561e47a 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -175,7 +175,9 @@ def gen_marshal(name, arg_type, ret_type):
ret += gen_marshal_input_visit(arg_type)
ret += gen_call(name, arg_type, ret_type)
- if re.search('^ *goto out;', ret, re.MULTILINE):
+ # 'goto out' produced by gen_marshal_input_visit->gen_visit_fields()
+ # for each arg_type member, and by gen_call() for ret_type
+ if (arg_type and arg_type.members) or ret_type:
ret += mcgen('''
out:
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index d0759d7..2dc3aed 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -87,7 +87,8 @@ static void visit_type_%(c_name)s_fields(Visitor *v,
%(c_name)s **obj, Error **e
ret += gen_visit_fields(members, prefix='(*obj)->')
- if re.search('^ *goto out;', ret, re.MULTILINE):
+ # 'goto out' produced for base, and by gen_visit_fields() for each member
+ if base or members:
ret += mcgen('''
out:
--
2.4.3
- [Qemu-devel] [PATCH v11 08/24] qapi-types: Refactor base fields output, (continued)
- [Qemu-devel] [PATCH v11 24/24] qapi: Simplify gen_struct_field(), Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 21/24] tpm: Convert to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 22/24] qapi: Finish converting to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 15/24] block: Convert to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 03/24] qapi: More robust conditions for when labels are needed,
Eric Blake <=
- [Qemu-devel] [PATCH v11 23/24] qapi: Reserve 'u' member name, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 16/24] sockets: Convert to new qapi union layout, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 17/24] net: Convert to new qapi union layout, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 18/24] char: Convert to new qapi union layout, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 02/24] qapi: More idiomatic string operations, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 19/24] input: Convert to new qapi union layout, Eric Blake, 2015/10/26
[Qemu-devel] [PATCH v11 06/24] vnc: Hoist allocation of VncBasicInfo to callers, Eric Blake, 2015/10/26