From patchwork Tue Dec 8 03:55:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Blake X-Patchwork-Id: 553773 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1B3BD1402C9 for ; Tue, 8 Dec 2015 15:07:18 +1100 (AEDT) Received: from localhost ([::1]:57763 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a69YZ-0007jU-D9 for incoming@patchwork.ozlabs.org; Mon, 07 Dec 2015 23:07:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48250) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a69NN-0004Wr-AJ for qemu-devel@nongnu.org; Mon, 07 Dec 2015 22:55:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a69NM-0003dj-7l for qemu-devel@nongnu.org; Mon, 07 Dec 2015 22:55:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:46720) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a69NM-0003dV-2H for qemu-devel@nongnu.org; Mon, 07 Dec 2015 22:55:40 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 8CCF4C0B7A25; Tue, 8 Dec 2015 03:55:39 +0000 (UTC) Received: from red.redhat.com (ovpn-113-183.phx2.redhat.com [10.3.113.183]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tB83tOMB007883; Mon, 7 Dec 2015 22:55:38 -0500 From: Eric Blake To: qemu-devel@nongnu.org Date: Mon, 7 Dec 2015 20:55:12 -0700 Message-Id: <1449546921-6378-23-git-send-email-eblake@redhat.com> In-Reply-To: <1449546921-6378-1-git-send-email-eblake@redhat.com> References: <1449546921-6378-1-git-send-email-eblake@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: armbru@redhat.com, Michael Roth Subject: [Qemu-devel] [PATCH v7 22/31] qapi: Add type.is_empty() helper X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 --- 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 111958d..f2feaaf 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 0d86269..8f57200 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 497eaba..8b388ee 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)