From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34225) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZmdKM-00021D-EI for qemu-devel@nongnu.org; Thu, 15 Oct 2015 03:51:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZmdKI-0002PS-3U for qemu-devel@nongnu.org; Thu, 15 Oct 2015 03:51:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43915) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZmdKH-0002PH-TZ for qemu-devel@nongnu.org; Thu, 15 Oct 2015 03:51:50 -0400 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 285352FD9D5 for ; Thu, 15 Oct 2015 07:51:49 +0000 (UTC) From: Markus Armbruster Date: Thu, 15 Oct 2015 09:51:36 +0200 Message-Id: <1444895505-16067-4-git-send-email-armbru@redhat.com> In-Reply-To: <1444895505-16067-1-git-send-email-armbru@redhat.com> References: <1444895505-16067-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PULL 03/12] qapi: Prepare for errors during check() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org From: Eric Blake The next few patches will start migrating error checking from ad hoc parse methods into the QAPISchema*.check() methods. But for an error message to display, we first have to fix the overall 'try' to catch those errors. We also want to enable a few more assertions, such as making sure every attempt to raise a semantic error is passed a valid location info, or that various preconditions hold. The general approach for moving error checking will then be to relax an assertion into an if that raises an exception if the condition does not hold, and removing the counterpart ad hoc check done during the parse phase. Signed-off-by: Eric Blake Message-Id: <1444710158-8723-3-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster --- scripts/qapi.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index 543b378..4573599 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -103,6 +103,7 @@ class QAPISchemaError(Exception): class QAPIExprError(Exception): def __init__(self, expr_info, msg): Exception.__init__(self) + assert expr_info self.info = expr_info self.msg = msg @@ -964,6 +965,7 @@ class QAPISchemaObjectType(QAPISchemaType): members = [] seen = {} for m in members: + assert c_name(m.name) not in seen seen[m.name] = m for m in self.local_members: m.check(schema, members, seen) @@ -1116,13 +1118,13 @@ class QAPISchema(object): def __init__(self, fname): try: self.exprs = check_exprs(QAPISchemaParser(open(fname, "r")).exprs) + self._entity_dict = {} + self._def_predefineds() + self._def_exprs() + self.check() except (QAPISchemaError, QAPIExprError), err: print >>sys.stderr, err exit(1) - self._entity_dict = {} - self._def_predefineds() - self._def_exprs() - self.check() def _def_entity(self, ent): assert ent.name not in self._entity_dict -- 2.4.3