mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
qapi: Prepare for errors during check()
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>
This commit is contained in:
parent
25a0d9c977
commit
7618b91ff8
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user