[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 02/18] qapi: Prepare for errors during check()
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v8 02/18] qapi: Prepare for errors during check() |
Date: |
Mon, 12 Oct 2015 22:22:22 -0600 |
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 <address@hidden>
---
v8: no change
v7: Split off of v6 7/12, plus other obvious asserts floated up
---
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
- Re: [Qemu-devel] [PATCH v8 15/18] qapi: Move duplicate member checks to schema check(), (continued)
[Qemu-devel] [PATCH v8 18/18] qapi: Detect base class loops, Eric Blake, 2015/10/13
[Qemu-devel] [PATCH v8 16/18] qapi: Move duplicate enum value checks to schema check(), Eric Blake, 2015/10/13
[Qemu-devel] [PATCH v8 06.5/18] qapi: Drop redundant args-member-array test, Eric Blake, 2015/10/13
[Qemu-devel] [PATCH v8 06/18] qapi: Drop redundant flat-union-reverse-define test, Eric Blake, 2015/10/15
[Qemu-devel] [PATCH v8 02/18] qapi: Prepare for errors during check(),
Eric Blake <=
[Qemu-devel] [PATCH v8 13/18] qapi: Track owner of each object member, Eric Blake, 2015/10/15
[Qemu-devel] [PATCH v8 17/18] qapi: Add test for alternate branch 'kind' clash, Eric Blake, 2015/10/15
Re: [Qemu-devel] [PATCH v8 00/18] post-introspection cleanups, subset B, Markus Armbruster, 2015/10/15