[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 for-2.7 07/15] qapi: Add type.is_empty() helper
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL v2 for-2.7 07/15] qapi: Add type.is_empty() helper |
Date: |
Tue, 19 Jul 2016 20:41:50 +0200 |
From: Eric Blake <address@hidden>
In the near future, we want to lift our artificial restriction of
no variants at the top level of an event, at which point the
currently open-coded check for empty members will become
insufficient. Factor it out into a new helper method is_empty()
now, and future-proof it by checking variants, too, along with an
assert that it is not used prior to the completion of .check().
Update places that were checking for (non-)empty .members to use
the new helper.
All of the current callers assert that there are no variants (either
directly, or by qapi.py asserting that base types have no variants),
so this is not a semantic change.
No change to generated code.
Signed-off-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
scripts/qapi-commands.py | 6 +++---
scripts/qapi-event.py | 6 +++---
scripts/qapi-types.py | 2 +-
scripts/qapi.py | 4 ++++
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index 34b6a3a..c93470c 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -107,7 +107,7 @@ def gen_marshal(name, arg_type, ret_type):
''',
c_type=ret_type.c_type())
- if arg_type and arg_type.members:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
Visitor *v;
%(c_name)s arg = {0};
@@ -137,7 +137,7 @@ def gen_marshal(name, arg_type, ret_type):
ret += gen_call(name, arg_type, ret_type)
# 'goto out' produced above for arg_type, and by gen_call() for ret_type
- if (arg_type and arg_type.members) or ret_type:
+ if (arg_type and not arg_type.is_empty()) or ret_type:
ret += mcgen('''
out:
@@ -145,7 +145,7 @@ out:
ret += mcgen('''
error_propagate(errp, err);
''')
- if arg_type and arg_type.members:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
visit_free(v);
v = qapi_dealloc_visitor_new();
diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
index 9c88627..09c0a2a 100644
--- a/scripts/qapi-event.py
+++ b/scripts/qapi-event.py
@@ -69,7 +69,7 @@ def gen_event_send(name, arg_type):
''',
proto=gen_event_send_proto(name, arg_type))
- if arg_type and arg_type.members:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
QObject *obj;
Visitor *v;
@@ -88,7 +88,7 @@ def gen_event_send(name, arg_type):
''',
name=name)
- if arg_type and arg_type.members:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
v = qmp_output_visitor_new(&obj);
@@ -116,7 +116,7 @@ def gen_event_send(name, arg_type):
''',
c_enum=c_enum_const(event_enum_name, name))
- if arg_type and arg_type.members:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
out:
visit_free(v);
diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index 5ace2cf..dabc42e 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -91,7 +91,7 @@ struct %(c_name)s {
# potential issues with attempting to malloc space for zero-length
# structs in C, and also incompatibility with C++ (where an empty
# struct is size 1).
- if not (base and base.members) and not members and not variants:
+ if (not base or base.is_empty()) and not members and not variants:
ret += mcgen('''
char qapi_dummy_for_empty_struct;
''')
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 400c4ef..27284be 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -999,6 +999,10 @@ class QAPISchemaObjectType(QAPISchemaType):
# _def_predefineds()
return self.name.startswith('q_')
+ def is_empty(self):
+ assert self.members is not None
+ return not self.members and not self.variants
+
def c_name(self):
assert self.name != 'q_empty'
return QAPISchemaType.c_name(self)
--
2.5.5
- [Qemu-devel] [PULL v2 for-2.7 00/15] QAPI patches for 2016-07-19, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 05/15] qapi: Special case c_name() for empty type, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 08/15] qapi: Drop useless gen_err_check(), Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 02/15] qapi: change QmpInputVisitor to QSLIST, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 01/15] qapi: change QmpOutputVisitor to QSLIST, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 06/15] qapi: Hide tag_name data member of variants, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 07/15] qapi: Add type.is_empty() helper,
Markus Armbruster <=
- [Qemu-devel] [PULL v2 for-2.7 03/15] net: use Netdev instead of NetClientOptions in client init, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 13/15] block: Simplify drive-mirror, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 04/15] qapi: Require all branches of flat union enum to be covered, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 09/15] qapi-event: Simplify visit of non-implicit data, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 12/15] block: Simplify block_set_io_throttle, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 10/15] qapi: Plumb in 'boxed' to qapi generator lower levels, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 11/15] qapi: Implement boxed types for commands/events, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 14/15] qapi: Change Netdev into a flat union, Markus Armbruster, 2016/07/19
- [Qemu-devel] [PULL v2 for-2.7 15/15] net: Use correct type for bool flag, Markus Armbruster, 2016/07/19
- Re: [Qemu-devel] [PULL v2 for-2.7 00/15] QAPI patches for 2016-07-19, Peter Maydell, 2016/07/20