From patchwork Thu Nov 26 00:23:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Blake X-Patchwork-Id: 548878 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 3D5A3140306 for ; Thu, 26 Nov 2015 11:32:14 +1100 (AEDT) Received: from localhost ([::1]:48492 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1kTs-0006mD-6L for incoming@patchwork.ozlabs.org; Wed, 25 Nov 2015 19:32:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58580) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1kLV-00078S-UQ for qemu-devel@nongnu.org; Wed, 25 Nov 2015 19:23:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a1kLU-0005tj-Lb for qemu-devel@nongnu.org; Wed, 25 Nov 2015 19:23:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:41833) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1kLU-0005tV-Go for qemu-devel@nongnu.org; Wed, 25 Nov 2015 19:23:32 -0500 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 20DD8C0D2221; Thu, 26 Nov 2015 00:23:32 +0000 (UTC) Received: from red.redhat.com ([10.3.113.12]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tAQ0NOda020886; Wed, 25 Nov 2015 19:23:31 -0500 From: Eric Blake To: qemu-devel@nongnu.org Date: Wed, 25 Nov 2015 17:23:10 -0700 Message-Id: <1448497401-27784-14-git-send-email-eblake@redhat.com> In-Reply-To: <1448497401-27784-1-git-send-email-eblake@redhat.com> References: <1448497401-27784-1-git-send-email-eblake@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 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 v6 13/23] 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 --- 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 720486f..51128f4 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,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(); g_assert(qov); @@ -90,7 +90,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: qmp_output_visitor_cleanup(qov); diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py index d0e1f74..af6b324 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 4197b30..45bc5a7 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -975,6 +975,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)