qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH RFC v2 38/47] qapi-commands: De-duplicate output mar


From: Markus Armbruster
Subject: [Qemu-devel] [PATCH RFC v2 38/47] qapi-commands: De-duplicate output marshaling functions
Date: Wed, 1 Jul 2015 22:22:26 +0200

gen_marshal_output() uses its parameter name only for name of the
generated function.  Name it after the type being marshaled instead of
its caller, and drop duplicates.

Saves 7 copies of qmp_marshal_output_int() in qemu-ga, and one copy of
qmp_marshal_output_str() in qemu-system-*.

Signed-off-by: Markus Armbruster <address@hidden>
---
 scripts/qapi-commands.py | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index 2dae425..fcbb7d0 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -59,7 +59,7 @@ def gen_call(name, args, rets):
 
 qmp_marshal_output_%(c_name)s(retval, ret, &local_err);
 ''',
-                     c_name=c_name(name))
+                     c_name=rets.c_name())
     pop_indent()
     return ret
 
@@ -165,10 +165,10 @@ qapi_dealloc_visitor_cleanup(md);
     pop_indent()
     return ret
 
-def gen_marshal_output(name, rets):
+def gen_marshal_output(rets):
     return mcgen('''
 
-static void qmp_marshal_output_%(c_cmd_name)s(%(c_type)s ret_in, QObject 
**ret_out, Error **errp)
+static void qmp_marshal_output_%(c_name)s(%(c_type)s ret_in, QObject 
**ret_out, Error **errp)
 {
     Error *local_err = NULL;
     QmpOutputVisitor *mo = qmp_output_visitor_new();
@@ -191,8 +191,7 @@ out:
     qapi_dealloc_visitor_cleanup(md);
 }
 ''',
-                 c_type=rets.c_type(), c_cmd_name=c_name(name),
-                 c_name=rets.c_name())
+                 c_type=rets.c_type(), c_name=rets.c_name())
 
 def gen_marshal_proto(name):
     ret = 'void qmp_marshal_%s(QDict *args, QObject **ret, Error **errp)' % 
c_name(name)
@@ -265,10 +264,12 @@ class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
         self.decl = None
         self.defn = None
         self.regy = None
+        self.visited_rets = None
     def visit_begin(self):
         self.decl = ''
         self.defn = ''
         self.regy = ''
+        self.visited_rets = set()
     def visit_end(self):
         if not middle_mode:
             self.defn += gen_registry(self.regy)
@@ -277,8 +278,9 @@ class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
         if not gen:
             return
         self.decl += gen_command_decl(name, args, rets)
-        if rets:
-            self.defn += gen_marshal_output(name, rets)
+        if rets and rets not in self.visited_rets:
+            self.visited_rets.add(rets)
+            self.defn += gen_marshal_output(rets)
         if middle_mode:
             self.decl += gen_marshal_decl(name)
         self.defn += gen_marshal(name, args, rets)
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]