[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 11/19] qapi: Add type.is_empty() helper
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v2 11/19] qapi: Add type.is_empty() helper |
Date: |
Thu, 25 Feb 2016 16:38:40 -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, but
adding a check for variants adds verbosity; in the meantime,
add some asserts in places where we don't handle variants.
More immediately, the new .is_empty() helper will help fix a bug
in qapi-visit in the next patch, where the generator did not
handle an explicit empty type in the same was as a missing type.
No change to generated code.
Signed-off-by: Eric Blake <address@hidden>
---
v2: no change
v1: add some asserts
Previously posted as part of qapi cleanup subset E:
v9: improve commit message
v8: no change
v7: rebase to context change
v6: new patch
---
scripts/qapi.py | 5 +++++
scripts/qapi-event.py | 7 ++++---
scripts/qapi-types.py | 2 +-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 6c52fe5..83080b3 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -962,6 +962,7 @@ class QAPISchemaObjectType(QAPISchemaType):
assert isinstance(self.base, QAPISchemaObjectType)
self.base.check(schema)
self.base.check_clash(schema, self.info, seen)
+ assert not self.base.variants
for m in self.local_members:
m.check(schema)
m.check_clash(self.info, seen)
@@ -983,6 +984,10 @@ class QAPISchemaObjectType(QAPISchemaType):
# See QAPISchema._make_implicit_object_type()
return self.name[0] == ':'
+ def is_empty(self):
+ assert self.members is not None
+ return not self.members and not self.variants
+
def c_name(self):
assert not self.is_implicit()
return QAPISchemaType.c_name(self)
diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
index fb579dd..808ed80 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('''
QmpOutputVisitor *qov;
Visitor *v;
@@ -58,7 +58,8 @@ 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():
+ assert not arg_type.variants
ret += mcgen('''
qov = qmp_output_visitor_new();
v = qmp_output_get_visitor(qov);
@@ -88,7 +89,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 0306a88..6c1923d 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -90,7 +90,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;
''')
--
2.5.0
- [Qemu-devel] [PATCH v2 01/19] qapi: Rename 'fields' to 'members' in internal interface, (continued)
- [Qemu-devel] [PATCH v2 01/19] qapi: Rename 'fields' to 'members' in internal interface, Eric Blake, 2016/02/25
- [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 <=
- [Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visit_members_call(), Eric Blake, 2016/02/25
- [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