Message ID | 1450717720-9627-27-git-send-email-eblake@redhat.com |
---|---|
State | New |
Headers | show |
Hi On Mon, Dec 21, 2015 at 6:08 PM, Eric Blake <eblake@redhat.com> wrote: > 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. > which bug? (I guess it's related to the next patch)
On 01/05/2016 07:04 AM, Marc-André Lureau wrote: > Hi > > On Mon, Dec 21, 2015 at 6:08 PM, Eric Blake <eblake@redhat.com> wrote: >> 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. >> > > which bug? (I guess it's related to the next patch) Yes, the next patch. I guess I can spell it out better in this commit message, though.
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)
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 <eblake@redhat.com> --- 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(-)