[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for 2.9 03/49] qapi: Factor QAPISchemaParser._include
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL for 2.9 03/49] qapi: Factor QAPISchemaParser._include() out of .__init__() |
Date: |
Thu, 16 Mar 2017 07:27:19 +0100 |
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Message-Id: <address@hidden>
---
scripts/qapi.py | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 53a4477..345cde1 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -268,34 +268,15 @@ class QAPISchemaParser(object):
continue
expr = self.get_expr(False)
- if isinstance(expr, dict) and "include" in expr:
+ if 'include' in expr:
if len(expr) != 1:
raise QAPISemError(info, "Invalid 'include' directive")
include = expr["include"]
if not isinstance(include, str):
raise QAPISemError(info,
"Value of 'include' must be a string")
- incl_abs_fname = os.path.join(os.path.dirname(abs_fname),
- include)
- # catch inclusion cycle
- inf = info
- while inf:
- if incl_abs_fname == os.path.abspath(inf['file']):
- raise QAPISemError(info, "Inclusion loop for %s"
- % include)
- inf = inf['parent']
-
- # skip multiple include of the same file
- if incl_abs_fname in previously_included:
- continue
- try:
- fobj = open(incl_abs_fname, 'r')
- except IOError as e:
- raise QAPISemError(info, '%s: %s' % (e.strerror, include))
- exprs_include = QAPISchemaParser(fobj, previously_included,
- info)
- self.exprs.extend(exprs_include.exprs)
- self.docs.extend(exprs_include.docs)
+ self._include(include, info, os.path.dirname(abs_fname),
+ previously_included)
else:
expr_elem = {'expr': expr,
'info': info}
@@ -307,6 +288,26 @@ class QAPISchemaParser(object):
self.exprs.append(expr_elem)
+ def _include(self, include, info, base_dir, previously_included):
+ incl_abs_fname = os.path.join(base_dir, include)
+ # catch inclusion cycle
+ inf = info
+ while inf:
+ if incl_abs_fname == os.path.abspath(inf['file']):
+ raise QAPISemError(info, "Inclusion loop for %s" % include)
+ inf = inf['parent']
+
+ # skip multiple include of the same file
+ if incl_abs_fname in previously_included:
+ return
+ try:
+ fobj = open(incl_abs_fname, 'r')
+ except IOError as e:
+ raise QAPISemError(info, '%s: %s' % (e.strerror, include))
+ exprs_include = QAPISchemaParser(fobj, previously_included, info)
+ self.exprs.extend(exprs_include.exprs)
+ self.docs.extend(exprs_include.docs)
+
def accept(self, skip_comment=True):
while True:
self.tok = self.src[self.cursor]
--
2.7.4
- [Qemu-devel] [PULL for 2.9 00/49] QAPI patches for 2017-03-16, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 02/49] qmp: allow setting properties to empty string in qmp-shell, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 03/49] qapi: Factor QAPISchemaParser._include() out of .__init__(),
Markus Armbruster <=
- [Qemu-devel] [PULL for 2.9 06/49] docs/qapi-code-gen.txt: Drop confusing reference to 'gen', Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 10/49] tests/qapi-schema: Cover empty union base, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 11/49] qapi: Fix to reject empty union base gracefully, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 01/49] qapi2texi: change texi formatters, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 08/49] qapi: Have each QAPI schema declare its name rule violations, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 07/49] qapi: Have each QAPI schema declare its returns white-list, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 12/49] qapi2texi: Fix up output around #optional, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 04/49] qapi: Make doc comments optional where we don't need them, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 20/49] qapi: Use raw strings for regular expressions consistently, Markus Armbruster, 2017/03/16
- [Qemu-devel] [PULL for 2.9 14/49] qapi/rocker: Fix up doc comment notes on optional members, Markus Armbruster, 2017/03/16