Ver código fonte

qapi: Reduce use of global variables in generators some

In preparation of the next commit, which will turn the generators into
modules.  These global variables will become local to main() then.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20180211093607.27351-7-armbru@redhat.com>
Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Markus Armbruster 7 anos atrás
pai
commit
93b564c444

+ 5 - 4
scripts/qapi-commands.py

@@ -207,7 +207,7 @@ def gen_register_command(name, success_response):
     return ret
     return ret
 
 
 
 
-def gen_registry(registry):
+def gen_registry(registry, prefix):
     ret = mcgen('''
     ret = mcgen('''
 
 
 void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds)
 void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds)
@@ -224,7 +224,8 @@ def gen_registry(registry):
 
 
 
 
 class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
 class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
-    def __init__(self):
+    def __init__(self, prefix):
+        self._prefix = prefix
         self.decl = None
         self.decl = None
         self.defn = None
         self.defn = None
         self._regy = None
         self._regy = None
@@ -237,7 +238,7 @@ def visit_begin(self, schema):
         self._visited_ret_types = set()
         self._visited_ret_types = set()
 
 
     def visit_end(self):
     def visit_end(self):
-        self.defn += gen_registry(self._regy)
+        self.defn += gen_registry(self._regy, self._prefix)
         self._regy = None
         self._regy = None
         self._visited_ret_types = None
         self._visited_ret_types = None
 
 
@@ -287,7 +288,7 @@ def visit_command(self, name, info, arg_type, ret_type,
                prefix=prefix, c_prefix=c_name(prefix, protect=False)))
                prefix=prefix, c_prefix=c_name(prefix, protect=False)))
 
 
 schema = QAPISchema(input_file)
 schema = QAPISchema(input_file)
-vis = QAPISchemaGenCommandVisitor()
+vis = QAPISchemaGenCommandVisitor(prefix)
 schema.visit(vis)
 schema.visit(vis)
 genc.add(vis.defn)
 genc.add(vis.defn)
 genh.add(vis.decl)
 genh.add(vis.decl)

+ 7 - 8
scripts/qapi-event.py

@@ -58,7 +58,7 @@ def gen_param_var(typ):
     return ret
     return ret
 
 
 
 
-def gen_event_send(name, arg_type, boxed):
+def gen_event_send(name, arg_type, boxed, event_enum_name):
     # FIXME: Our declaration of local variables (and of 'errp' in the
     # FIXME: Our declaration of local variables (and of 'errp' in the
     # parameter list) can collide with exploded members of the event's
     # parameter list) can collide with exploded members of the event's
     # data type passed in as parameters.  If this collision ever hits in
     # data type passed in as parameters.  If this collision ever hits in
@@ -149,7 +149,8 @@ def gen_event_send(name, arg_type, boxed):
 
 
 
 
 class QAPISchemaGenEventVisitor(QAPISchemaVisitor):
 class QAPISchemaGenEventVisitor(QAPISchemaVisitor):
-    def __init__(self):
+    def __init__(self, prefix):
+        self._enum_name = c_name(prefix + 'QAPIEvent', protect=False)
         self.decl = None
         self.decl = None
         self.defn = None
         self.defn = None
         self._event_names = None
         self._event_names = None
@@ -160,13 +161,13 @@ def visit_begin(self, schema):
         self._event_names = []
         self._event_names = []
 
 
     def visit_end(self):
     def visit_end(self):
-        self.decl += gen_enum(event_enum_name, self._event_names)
-        self.defn += gen_enum_lookup(event_enum_name, self._event_names)
+        self.decl += gen_enum(self._enum_name, self._event_names)
+        self.defn += gen_enum_lookup(self._enum_name, self._event_names)
         self._event_names = None
         self._event_names = None
 
 
     def visit_event(self, name, info, arg_type, boxed):
     def visit_event(self, name, info, arg_type, boxed):
         self.decl += gen_event_send_decl(name, arg_type, boxed)
         self.decl += gen_event_send_decl(name, arg_type, boxed)
-        self.defn += gen_event_send(name, arg_type, boxed)
+        self.defn += gen_event_send(name, arg_type, boxed, self._enum_name)
         self._event_names.append(name)
         self._event_names.append(name)
 
 
 
 
@@ -197,10 +198,8 @@ def visit_event(self, name, info, arg_type, boxed):
 ''',
 ''',
                prefix=prefix))
                prefix=prefix))
 
 
-event_enum_name = c_name(prefix + 'QAPIEvent', protect=False)
-
 schema = QAPISchema(input_file)
 schema = QAPISchema(input_file)
-vis = QAPISchemaGenEventVisitor()
+vis = QAPISchemaGenEventVisitor(prefix)
 schema.visit(vis)
 schema.visit(vis)
 genc.add(vis.defn)
 genc.add(vis.defn)
 genh.add(vis.decl)
 genh.add(vis.decl)

+ 4 - 3
scripts/qapi-introspect.py

@@ -41,7 +41,8 @@ def to_c_string(string):
 
 
 
 
 class QAPISchemaGenIntrospectVisitor(QAPISchemaVisitor):
 class QAPISchemaGenIntrospectVisitor(QAPISchemaVisitor):
-    def __init__(self, unmask):
+    def __init__(self, prefix, unmask):
+        self._prefix = prefix
         self._unmask = unmask
         self._unmask = unmask
         self.defn = None
         self.defn = None
         self.decl = None
         self.decl = None
@@ -65,7 +66,7 @@ def visit_end(self):
         # generate C
         # generate C
         # TODO can generate awfully long lines
         # TODO can generate awfully long lines
         jsons.extend(self._jsons)
         jsons.extend(self._jsons)
-        name = c_name(prefix, protect=False) + 'qmp_schema_json'
+        name = c_name(self._prefix, protect=False) + 'qmp_schema_json'
         self.decl = mcgen('''
         self.decl = mcgen('''
 extern const char %(c_name)s[];
 extern const char %(c_name)s[];
 ''',
 ''',
@@ -190,7 +191,7 @@ def visit_event(self, name, info, arg_type, boxed):
                prefix=prefix))
                prefix=prefix))
 
 
 schema = QAPISchema(input_file)
 schema = QAPISchema(input_file)
-vis = QAPISchemaGenIntrospectVisitor(opt_unmask)
+vis = QAPISchemaGenIntrospectVisitor(prefix, opt_unmask)
 schema.visit(vis)
 schema.visit(vis)
 genc.add(vis.defn)
 genc.add(vis.defn)
 genh.add(vis.decl)
 genh.add(vis.decl)

+ 9 - 8
scripts/qapi-types.py

@@ -168,7 +168,8 @@ def gen_type_cleanup(name):
 
 
 
 
 class QAPISchemaGenTypeVisitor(QAPISchemaVisitor):
 class QAPISchemaGenTypeVisitor(QAPISchemaVisitor):
-    def __init__(self):
+    def __init__(self, opt_builtins):
+        self._opt_builtins = opt_builtins
         self.decl = None
         self.decl = None
         self.defn = None
         self.defn = None
         self._fwdecl = None
         self._fwdecl = None
@@ -187,7 +188,7 @@ def visit_end(self):
         self._fwdecl = None
         self._fwdecl = None
         # To avoid header dependency hell, we always generate
         # To avoid header dependency hell, we always generate
         # declarations for built-in types in our header files and
         # declarations for built-in types in our header files and
-        # simply guard them.  See also do_builtins (command line
+        # simply guard them.  See also opt_builtins (command line
         # option -b).
         # option -b).
         self._btin += guardend('QAPI_TYPES_BUILTIN')
         self._btin += guardend('QAPI_TYPES_BUILTIN')
         self.decl = self._btin + self.decl
         self.decl = self._btin + self.decl
@@ -202,7 +203,7 @@ def visit_enum_type(self, name, info, values, prefix):
         # TODO use something cleaner than existence of info
         # TODO use something cleaner than existence of info
         if not info:
         if not info:
             self._btin += gen_enum(name, values, prefix)
             self._btin += gen_enum(name, values, prefix)
-            if do_builtins:
+            if self._opt_builtins:
                 self.defn += gen_enum_lookup(name, values, prefix)
                 self.defn += gen_enum_lookup(name, values, prefix)
         else:
         else:
             self._fwdecl += gen_enum(name, values, prefix)
             self._fwdecl += gen_enum(name, values, prefix)
@@ -213,7 +214,7 @@ def visit_array_type(self, name, info, element_type):
             self._btin += gen_fwd_object_or_array(name)
             self._btin += gen_fwd_object_or_array(name)
             self._btin += gen_array(name, element_type)
             self._btin += gen_array(name, element_type)
             self._btin += gen_type_cleanup_decl(name)
             self._btin += gen_type_cleanup_decl(name)
-            if do_builtins:
+            if self._opt_builtins:
                 self.defn += gen_type_cleanup(name)
                 self.defn += gen_type_cleanup(name)
         else:
         else:
             self._fwdecl += gen_fwd_object_or_array(name)
             self._fwdecl += gen_fwd_object_or_array(name)
@@ -241,16 +242,16 @@ def visit_alternate_type(self, name, info, variants):
 
 
 # If you link code generated from multiple schemata, you want only one
 # If you link code generated from multiple schemata, you want only one
 # instance of the code for built-in types.  Generate it only when
 # instance of the code for built-in types.  Generate it only when
-# do_builtins, enabled by command line option -b.  See also
+# opt_builtins, enabled by command line option -b.  See also
 # QAPISchemaGenTypeVisitor.visit_end().
 # QAPISchemaGenTypeVisitor.visit_end().
-do_builtins = False
+opt_builtins = False
 
 
 (input_file, output_dir, do_c, do_h, prefix, opts) = \
 (input_file, output_dir, do_c, do_h, prefix, opts) = \
     parse_command_line('b', ['builtins'])
     parse_command_line('b', ['builtins'])
 
 
 for o, a in opts:
 for o, a in opts:
     if o in ('-b', '--builtins'):
     if o in ('-b', '--builtins'):
-        do_builtins = True
+        opt_builtins = True
 
 
 blurb = ' * Schema-defined QAPI types'
 blurb = ' * Schema-defined QAPI types'
 
 
@@ -270,7 +271,7 @@ def visit_alternate_type(self, name, info, variants):
 '''))
 '''))
 
 
 schema = QAPISchema(input_file)
 schema = QAPISchema(input_file)
-vis = QAPISchemaGenTypeVisitor()
+vis = QAPISchemaGenTypeVisitor(opt_builtins)
 schema.visit(vis)
 schema.visit(vis)
 genc.add(vis.defn)
 genc.add(vis.defn)
 genh.add(vis.decl)
 genh.add(vis.decl)

+ 9 - 8
scripts/qapi-visit.py

@@ -264,7 +264,8 @@ def gen_visit_object(name, base, members, variants):
 
 
 
 
 class QAPISchemaGenVisitVisitor(QAPISchemaVisitor):
 class QAPISchemaGenVisitVisitor(QAPISchemaVisitor):
-    def __init__(self):
+    def __init__(self, opt_builtins):
+        self._opt_builtins = opt_builtins
         self.decl = None
         self.decl = None
         self.defn = None
         self.defn = None
         self._btin = None
         self._btin = None
@@ -277,7 +278,7 @@ def visit_begin(self, schema):
     def visit_end(self):
     def visit_end(self):
         # To avoid header dependency hell, we always generate
         # To avoid header dependency hell, we always generate
         # declarations for built-in types in our header files and
         # declarations for built-in types in our header files and
-        # simply guard them.  See also do_builtins (command line
+        # simply guard them.  See also opt_builtins (command line
         # option -b).
         # option -b).
         self._btin += guardend('QAPI_VISIT_BUILTIN')
         self._btin += guardend('QAPI_VISIT_BUILTIN')
         self.decl = self._btin + self.decl
         self.decl = self._btin + self.decl
@@ -288,7 +289,7 @@ def visit_enum_type(self, name, info, values, prefix):
         # TODO use something cleaner than existence of info
         # TODO use something cleaner than existence of info
         if not info:
         if not info:
             self._btin += gen_visit_decl(name, scalar=True)
             self._btin += gen_visit_decl(name, scalar=True)
-            if do_builtins:
+            if self._opt_builtins:
                 self.defn += gen_visit_enum(name)
                 self.defn += gen_visit_enum(name)
         else:
         else:
             self.decl += gen_visit_decl(name, scalar=True)
             self.decl += gen_visit_decl(name, scalar=True)
@@ -299,7 +300,7 @@ def visit_array_type(self, name, info, element_type):
         defn = gen_visit_list(name, element_type)
         defn = gen_visit_list(name, element_type)
         if isinstance(element_type, QAPISchemaBuiltinType):
         if isinstance(element_type, QAPISchemaBuiltinType):
             self._btin += decl
             self._btin += decl
-            if do_builtins:
+            if self._opt_builtins:
                 self.defn += defn
                 self.defn += defn
         else:
         else:
             self.decl += decl
             self.decl += decl
@@ -324,16 +325,16 @@ def visit_alternate_type(self, name, info, variants):
 
 
 # If you link code generated from multiple schemata, you want only one
 # If you link code generated from multiple schemata, you want only one
 # instance of the code for built-in types.  Generate it only when
 # instance of the code for built-in types.  Generate it only when
-# do_builtins, enabled by command line option -b.  See also
+# opt_builtins, enabled by command line option -b.  See also
 # QAPISchemaGenVisitVisitor.visit_end().
 # QAPISchemaGenVisitVisitor.visit_end().
-do_builtins = False
+opt_builtins = False
 
 
 (input_file, output_dir, do_c, do_h, prefix, opts) = \
 (input_file, output_dir, do_c, do_h, prefix, opts) = \
     parse_command_line('b', ['builtins'])
     parse_command_line('b', ['builtins'])
 
 
 for o, a in opts:
 for o, a in opts:
     if o in ('-b', '--builtins'):
     if o in ('-b', '--builtins'):
-        do_builtins = True
+        opt_builtins = True
 
 
 blurb = ' * Schema-defined QAPI visitors'
 blurb = ' * Schema-defined QAPI visitors'
 
 
@@ -357,7 +358,7 @@ def visit_alternate_type(self, name, info, variants):
                prefix=prefix))
                prefix=prefix))
 
 
 schema = QAPISchema(input_file)
 schema = QAPISchema(input_file)
-vis = QAPISchemaGenVisitVisitor()
+vis = QAPISchemaGenVisitVisitor(opt_builtins)
 schema.visit(vis)
 schema.visit(vis)
 genc.add(vis.defn)
 genc.add(vis.defn)
 genh.add(vis.decl)
 genh.add(vis.decl)