aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qapi/common.py')
-rw-r--r--scripts/qapi/common.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 1d0d30f9ec..961331a210 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -290,8 +290,11 @@ class QAPISchemaParser(object):
if not isinstance(include, str):
raise QAPISemError(info,
"Value of 'include' must be a string")
- exprs_include = self._include(include, info,
- os.path.dirname(self.fname),
+ incl_fname = os.path.join(os.path.dirname(self.fname),
+ include)
+ self.exprs.append({'expr': {'include': incl_fname},
+ 'info': info})
+ exprs_include = self._include(include, info, incl_fname,
previously_included)
if exprs_include:
self.exprs.extend(exprs_include.exprs)
@@ -326,8 +329,7 @@ class QAPISchemaParser(object):
"Documentation for '%s' is not followed by the definition"
% doc.symbol)
- def _include(self, include, info, base_dir, previously_included):
- incl_fname = os.path.join(base_dir, include)
+ def _include(self, include, info, incl_fname, previously_included):
incl_abs_fname = os.path.abspath(incl_fname)
# catch inclusion cycle
inf = info
@@ -893,6 +895,9 @@ def check_exprs(exprs):
info = expr_elem['info']
doc = expr_elem.get('doc')
+ if 'include' in expr:
+ continue
+
if not doc and doc_required:
raise QAPISemError(info,
"Expression missing documentation comment")
@@ -932,6 +937,9 @@ def check_exprs(exprs):
# Try again for hidden UnionKind enum
for expr_elem in exprs:
expr = expr_elem['expr']
+
+ if 'include' in expr:
+ continue
if 'union' in expr and not discriminator_find_enum_define(expr):
name = '%sKind' % expr['union']
elif 'alternate' in expr:
@@ -947,6 +955,8 @@ def check_exprs(exprs):
info = expr_elem['info']
doc = expr_elem.get('doc')
+ if 'include' in expr:
+ continue
if 'enum' in expr:
check_enum(expr, info)
elif 'union' in expr:
@@ -1667,6 +1677,8 @@ class QAPISchema(object):
self._def_command(expr, info, doc)
elif 'event' in expr:
self._def_event(expr, info, doc)
+ elif 'include' in expr:
+ pass
else:
assert False