Przeglądaj źródła

qapi: Eliminate check_docs() and drop QAPIDoc.expr

Move what's left in check_docs() to check_expr().  Delegate the actual
checking to new QAPIDoc.check_expr().

QAPIDoc.expr is now unused; drop it.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <1489582656-31133-39-git-send-email-armbru@redhat.com>
Markus Armbruster 8 lat temu
rodzic
commit
a9f396b028
1 zmienionych plików z 10 dodań i 17 usunięć
  1. 10 17
      scripts/qapi.py

+ 10 - 17
scripts/qapi.py

@@ -138,8 +138,6 @@ def __init__(self, parser, info):
         self.sections = []
         self.sections = []
         # the current section
         # the current section
         self.section = self.body
         self.section = self.body
-        # associated expression (to be set by expression parser)
-        self.expr = None
 
 
     def has_section(self, name):
     def has_section(self, name):
         """Return True if we have a section with this name."""
         """Return True if we have a section with this name."""
@@ -249,6 +247,11 @@ def connect_member(self, member):
             self.args[member.name] = QAPIDoc.ArgSection(member.name)
             self.args[member.name] = QAPIDoc.ArgSection(member.name)
         self.args[member.name].connect(member)
         self.args[member.name].connect(member)
 
 
+    def check_expr(self, expr):
+        if self.has_section('Returns') and 'command' not in expr:
+            raise QAPISemError(self.info,
+                               "'Returns:' is only valid for commands")
+
     def check(self):
     def check(self):
         bogus = [name for name, section in self.args.iteritems()
         bogus = [name for name, section in self.args.iteritems()
                  if not section.member]
                  if not section.member]
@@ -316,7 +319,6 @@ def __init__(self, fp, previously_included=[], incl_info=None):
                         raise QAPISemError(
                         raise QAPISemError(
                             self.cur_doc.info,
                             self.cur_doc.info,
                             "Expression documentation required")
                             "Expression documentation required")
-                    self.cur_doc.expr = expr
                     expr_elem['doc'] = self.cur_doc
                     expr_elem['doc'] = self.cur_doc
                 self.exprs.append(expr_elem)
                 self.exprs.append(expr_elem)
             self.cur_doc = None
             self.cur_doc = None
@@ -984,6 +986,7 @@ def check_exprs(exprs):
     for expr_elem in exprs:
     for expr_elem in exprs:
         expr = expr_elem['expr']
         expr = expr_elem['expr']
         info = expr_elem['info']
         info = expr_elem['info']
+        doc = expr_elem.get('doc')
 
 
         if 'enum' in expr:
         if 'enum' in expr:
             check_enum(expr, info)
             check_enum(expr, info)
@@ -1000,20 +1003,10 @@ def check_exprs(exprs):
         else:
         else:
             assert False, 'unexpected meta type'
             assert False, 'unexpected meta type'
 
 
-    return exprs
-
+        if doc:
+            doc.check_expr(expr)
 
 
-def check_definition_doc(doc, expr, info):
-    if doc.has_section('Returns') and 'command' not in expr:
-        raise QAPISemError(info, "'Returns:' is only valid for commands")
-
-
-def check_docs(docs):
-    for doc in docs:
-        if doc.expr:
-            check_definition_doc(doc, doc.expr, doc.info)
-
-    return docs
+    return exprs
 
 
 
 
 #
 #
@@ -1511,7 +1504,7 @@ def __init__(self, fname):
         try:
         try:
             parser = QAPISchemaParser(open(fname, 'r'))
             parser = QAPISchemaParser(open(fname, 'r'))
             self.exprs = check_exprs(parser.exprs)
             self.exprs = check_exprs(parser.exprs)
-            self.docs = check_docs(parser.docs)
+            self.docs = parser.docs
             self._entity_dict = {}
             self._entity_dict = {}
             self._predefining = True
             self._predefining = True
             self._def_predefineds()
             self._def_predefineds()