qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 03/12] qapi: Prepare for errors during check()
Date: Thu, 15 Oct 2015 09:51:36 +0200	[thread overview]
Message-ID: <1444895505-16067-4-git-send-email-armbru@redhat.com> (raw)
In-Reply-To: <1444895505-16067-1-git-send-email-armbru@redhat.com>

From: Eric Blake <eblake@redhat.com>

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 <eblake@redhat.com>
Message-Id: <1444710158-8723-3-git-send-email-eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 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

  parent reply	other threads:[~2015-10-15  7:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-15  7:51 [Qemu-devel] [PULL 00/12] QAPI patches Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 01/12] qapi: Fix regression with '-netdev help' Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 02/12] qapi: Use predicate callback to determine visit filtering Markus Armbruster
2015-10-15  7:51 ` Markus Armbruster [this message]
2015-10-15  7:51 ` [Qemu-devel] [PULL 04/12] qapi: Drop redundant alternate-good test Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 05/12] qapi: Move empty-enum to compile-time test Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 06/12] qapi: Drop redundant returns-int test Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 07/12] qapi: Drop redundant flat-union-reverse-define test Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 08/12] qapi: Drop redundant args-member-array test Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 09/12] qapi: Don't use info as witness of implicit object type Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 10/12] qapi: Lazy creation of array types Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 11/12] qapi: Create simple union type member earlier Markus Armbruster
2015-10-15  7:51 ` [Qemu-devel] [PULL 12/12] qapi: Track location that created an implicit type Markus Armbruster
2015-10-16 17:41 ` [Qemu-devel] [PULL 00/12] QAPI patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1444895505-16067-4-git-send-email-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).