[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 26/35] qapi: Add type.is_empty() helper
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v8 26/35] qapi: Add type.is_empty() helper |
Date: |
Mon, 21 Dec 2015 10:08:31 -0700 |
And use it in qapi-types and qapi-event. Down the road, we may
want to lift our artificial restriction of no variants at the
top level of an event, at which point, inlining our check for
whether members is empty will no longer be sufficient. More
immediately, the new .is_empty() helper will help fix a bug in
qapi-visit.
Signed-off-by: Eric Blake <address@hidden>
---
v8: no change
v7: rebase to context change
v6: new patch
---
scripts/qapi-event.py | 6 +++---
scripts/qapi-types.py | 2 +-
scripts/qapi.py | 3 +++
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
index 1bef611..7103ec6 100644
--- a/scripts/qapi-event.py
+++ b/scripts/qapi-event.py
@@ -39,7 +39,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;
QmpOutputVisitor *qov;
@@ -58,7 +58,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('''
qov = qmp_output_visitor_new();
v = qmp_output_get_visitor(qov);
@@ -88,7 +88,7 @@ out_obj:
''',
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:
qmp_output_visitor_cleanup(qov);
diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index d3f631a..c70fae1 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -76,7 +76,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_field_for_empty_struct;
''')
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 3b4c62e..a13c110 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -973,6 +973,9 @@ class QAPISchemaObjectType(QAPISchemaType):
# See QAPISchema._make_implicit_object_type()
return self.name[0] == ':'
+ def is_empty(self):
+ return not self.members and not self.variants
+
def c_name(self):
assert not self.is_implicit()
return QAPISchemaType.c_name(self)
--
2.4.3
- [Qemu-devel] [PATCH v8 28/35] qapi: Eliminate empty visit_type_FOO_fields, (continued)
- [Qemu-devel] [PATCH v8 28/35] qapi: Eliminate empty visit_type_FOO_fields, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 24/35] spapr_drc: Expose 'null' in qom-get when there is no fdt, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 31/35] qapi: Rework deallocation of partial struct, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 34/35] qapi: Change visit_type_FOO() to no longer return partial objects, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 32/35] qapi: Split visit_end_struct() into pieces, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 35/35] RFC: qapi: Adjust layout of FooList types, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 23/35] qmp: Tighten output visitor rules, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 33/35] qapi: Simplify semantics of visit_next_list(), Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 16/35] qapi: Swap 'name' in visit_* callbacks to match public API, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 30/35] qapi-visit: Unify struct and union visit, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 26/35] qapi: Add type.is_empty() helper,
Eric Blake <=
- [Qemu-devel] [PATCH v8 29/35] qapi: Canonicalize missing object to :empty, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 15/35] qom: Swap 'name' next to visitor in ObjectPropertyAccessor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 14/35] qapi: Swap visit_* arguments for consistent 'name' placement, Eric Blake, 2015/12/21