]> git.proxmox.com Git - mirror_qemu.git/commitdiff
qapi: Clean up modular built-in code generation a bit
authorMarkus Armbruster <armbru@redhat.com>
Thu, 14 Feb 2019 15:22:36 +0000 (16:22 +0100)
committerMarkus Armbruster <armbru@redhat.com>
Mon, 18 Feb 2019 13:44:04 +0000 (14:44 +0100)
We neglect to call .visit_module() for the special module we use for
built-ins.  Harmless, but clean it up anyway.  The
tests/qapi-schema/*.out now show the built-in module as 'module None'.

Subclasses of QAPISchemaModularCVisitor need to ._add_module() this
special module to enable code generation for built-ins.  When this
hasn't been done, QAPISchemaModularCVisitor.visit_module() does
nothing for the special module.  That looks like built-ins could
accidentally be generated into the wrong module when a subclass
neglects to call ._add_module().  Can't happen, because built-ins are
all visited before any other module.  But that's non-obvious.  Switch
off code generation explicitly.

Rename QAPISchemaModularCVisitor._begin_module() to
._begin_user_module().

New QAPISchemaModularCVisitor._is_builtin_module(), for clarity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20190214152251.2073-4-armbru@redhat.com>

16 files changed:
scripts/qapi/commands.py
scripts/qapi/common.py
scripts/qapi/events.py
scripts/qapi/types.py
scripts/qapi/visit.py
tests/qapi-schema/comments.out
tests/qapi-schema/doc-bad-section.out
tests/qapi-schema/doc-good.out
tests/qapi-schema/empty.out
tests/qapi-schema/event-case.out
tests/qapi-schema/ident-with-escape.out
tests/qapi-schema/include-relpath.out
tests/qapi-schema/include-repetition.out
tests/qapi-schema/include-simple.out
tests/qapi-schema/indented-expr.out
tests/qapi-schema/qapi-schema-test.out

index 0f3c991918efe8de1554429edddb8859a86f9866..ebf488953d67a75b5a2cb4161183843c7975aefe 100644 (file)
@@ -242,7 +242,7 @@ class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
         self._regy = QAPIGenCCode()
         self._visited_ret_types = {}
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         self._visited_ret_types[self._genc] = set()
         commands = self._module_basename('qapi-commands', name)
         types = self._module_basename('qapi-types', name)
index c89edc0cb0df52603b967eb4567a9cf8bf7fbb0a..0e3ec598a49ab639cf81b7ee05f1ff919edbc43d 100644 (file)
@@ -1868,6 +1868,7 @@ class QAPISchema(object):
     def visit(self, visitor):
         visitor.visit_begin(self)
         module = None
+        visitor.visit_module(module)
         for entity in self._entity_list:
             if visitor.visit_needed(entity):
                 if entity.module != module:
@@ -2321,9 +2322,15 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
         self._what = what
         self._blurb = blurb
         self._pydoc = pydoc
+        self._genc = None
+        self._genh = None
         self._module = {}
         self._main_module = None
 
+    @staticmethod
+    def _is_builtin_module(name):
+        return not name
+
     def _module_basename(self, what, name):
         if name is None:
             return re.sub(r'-', '-builtin-', what)
@@ -2334,7 +2341,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
         return basename + '-' + os.path.splitext(os.path.basename(name))[0]
 
     def _add_module(self, name, blurb):
-        if self._main_module is None and name is not None:
+        if self._main_module is None and not self._is_builtin_module(name):
             self._main_module = name
         genc = QAPIGenC(blurb, self._pydoc)
         genh = QAPIGenH(blurb, self._pydoc)
@@ -2346,22 +2353,27 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
 
     def write(self, output_dir, opt_builtins=False):
         for name in self._module:
-            if name is None and not opt_builtins:
+            if self._is_builtin_module(name) and not opt_builtins:
                 continue
             basename = self._module_basename(self._what, name)
             (genc, genh) = self._module[name]
             genc.write(output_dir, basename + '.c')
             genh.write(output_dir, basename + '.h')
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         pass
 
     def visit_module(self, name):
         if name in self._module:
             self._set_module(name)
-            return
-        self._add_module(name, self._blurb)
-        self._begin_module(name)
+        elif self._is_builtin_module(name):
+            # The built-in module has not been created.  No code may
+            # be generated.
+            self._genc = None
+            self._genh = None
+        else:
+            self._add_module(name, self._blurb)
+            self._begin_user_module(name)
 
     def visit_include(self, name, info):
         basename = self._module_basename(self._what, name)
index d86a2d2b3e5c07358bb39f3b4969233a830110d7..6f39cf81965734b32589b12dc56944357dabc421 100644 (file)
@@ -142,7 +142,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
         self._event_enum_members = []
         self._event_emit_name = c_name(prefix + 'qapi_event_emit')
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.add(mcgen('''
index 62d4cf9f952a31053df0bf5988d4a58f423ced5e..9fa510f7df9cb0239baa78b26513db2339295a3c 100644 (file)
@@ -194,7 +194,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
 #include "qapi/util.h"
 '''))
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.preamble_add(mcgen('''
index 82eab72b215583de0ad427cff414ef2c48deeb06..ca860093980d5259e5b0ca416034480fc29ea3e1 100644 (file)
@@ -298,7 +298,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
 ''',
                                       prefix=prefix))
 
-    def _begin_module(self, name):
+    def _begin_user_module(self, name):
         types = self._module_basename('qapi-types', name)
         visit = self._module_basename('qapi-visit', name)
         self._genc.preamble_add(mcgen('''
index d1abc4b5a1b7193af3c13ea087e8fed27a5086b9..273f0f54e16cf667955fe8a929de92b78eee0d76 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index db8014eed0971870ebb533a8080bf77b3c6cc928..367e2a1c3eb2bb5e6054930787e1113f9d0fd41d 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 21bf345ff01b0c6944845668ef8db8b742fc9fe6..d3bca343ebc83abdb57787ab0924f853757f1c3a 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 5483cb7bc6533181e9f8e3d7d3ad8367e0c3ddab..5b53d007021d3b7abab07202893de85df9685a97 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index f69d4ffe4eb437b51781659ede5116c1f2a2ba6d..ec8a1406e4453254b2096b45d24d757134c32b0b 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 7f891f7e90b93f650678bce4d038b0d7602ab87c..39754eba8c08e4a521c9d6cd922fe304d3dbbc41 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 783ccfc8556e51933987a9fac8748603a2280cef..cf8636b78f86c33ccefef8013f151b8be2f396fa 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index d45977ee56100d896a1adf7eab8ae6ebfd3734fc..5423983239cd0a9dc6d5e2471355815039a15733 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 1afe20802afb38f94bc0bf82b9d09c96afa1eedd..061f81e509043af729e860300f77368b5cd83e34 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index c0cf3243f372a0e6c00ad66fa73ff9ffb38671c0..bffdf6756d6f1a9bcb5beebf71a8992a44d6f7e0 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE
index 9464101d26884bdd456579d97228b121821e76b1..d8aec17115469064c45268e3ac0c23084efb6398 100644 (file)
@@ -1,3 +1,4 @@
+module None
 object q_empty
 enum QType
     prefix QTYPE