qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH RFC v2 35/47] qapi-commands: Rearrange code


From: Markus Armbruster
Subject: [Qemu-devel] [PATCH RFC v2 35/47] qapi-commands: Rearrange code
Date: Wed, 1 Jul 2015 22:22:23 +0200

Rename gen_marshal_input() to gen_marshal(), because the generated
function marshals both arguments and results.

Rename gen_visitor_input_containers_decl() to gen_marshal_vars(), and
move the other variable declarations there, too.

Rename gen_visitor_input_block()() to gen_marshal_input_visit(), and
rearrange its code slightly.

Rename gen_marshal_input_decl() to gen_marshal_proto(), because the
result isn't a full declaration, unlike gen_command_decl()'s.

New gen_marshal_decl() actually returns a full declaration.

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

diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index 5d11032..728f15b 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -56,6 +56,7 @@ def gen_call(name, args, rets):
 
     push_indent()
     ret = mcgen('''
+
 %(lhs)sqmp_%(c_name)s(%(args)s&local_err);
 ''',
                 c_name=c_name(name), args=argstr, lhs=lhs)
@@ -69,25 +70,31 @@ qmp_marshal_output_%(c_name)s(retval, ret, &local_err);
     pop_indent()
     return ret
 
-def gen_visitor_input_containers_decl(args):
-    ret = ''
+def gen_marshal_vars(args, rets):
+    ret = mcgen('''
+    Error *local_err = NULL;
+''')
 
     push_indent()
+
+    if rets:
+        # FIXME fishy: only pointers are initialized
+        if rets.c_null() == 'NULL':
+            retval = '%s retval = NULL;' % rets.c_type()
+        else:
+            retval = '%s retval;' % rets.c_type()
+        ret += mcgen('''
+%(retval)s
+''',
+                     retval=retval)
+
     if args:
         ret += mcgen('''
 QmpInputVisitor *mi = qmp_input_visitor_new_strict(QOBJECT(args));
 QapiDeallocVisitor *md;
 Visitor *v;
 ''')
-    pop_indent()
 
-    return ret
-
-def gen_visitor_input_vars_decl(args):
-    ret = ''
-    push_indent()
-
-    if args:
         for memb in args.members:
             if memb.optional:
                 ret += mcgen('''
@@ -100,14 +107,18 @@ bool has_%(c_name)s = false;
                          c_name=c_name(memb.name),
                          c_type=memb.type.c_type(),
                          c_null=memb.type.c_null())
+        ret += '\n'
+    else:
+        ret += mcgen('''
+
+(void)args;
+''')
 
     pop_indent()
     return ret
 
-def gen_visitor_input_block(args, dealloc=False):
+def gen_marshal_input_visit(args, dealloc=False):
     ret = ''
-    errparg = '&local_err'
-    errarg = 'local_err'
 
     if not args:
         return ret
@@ -123,6 +134,8 @@ md = qapi_dealloc_visitor_new();
 v = qapi_dealloc_get_visitor(md);
 ''')
     else:
+        errparg = '&local_err'
+        errarg = 'local_err'
         ret += mcgen('''
 v = qmp_input_get_visitor(mi);
 ''')
@@ -160,10 +173,7 @@ qapi_dealloc_visitor_cleanup(md);
     return ret
 
 def gen_marshal_output(name, rets):
-    if not rets:
-        return ''
-
-    ret = mcgen('''
+    return mcgen('''
 
 static void qmp_marshal_output_%(c_cmd_name)s(%(c_type)s ret_in, QObject 
**ret_out, Error **errp)
 {
@@ -188,50 +198,31 @@ 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_cmd_name=c_name(name),
+                 c_name=rets.c_name())
 
-    return ret
-
-def gen_marshal_input_decl(name):
+def gen_marshal_proto(name):
     ret = 'void qmp_marshal_input_%s(QDict *args, QObject **ret, Error 
**errp)' % c_name(name)
     if not middle_mode:
         ret = 'static ' + ret
     return ret
 
-def gen_marshal_input(name, args, rets):
-    hdr = gen_marshal_input_decl(name)
+def gen_marshal_decl(name):
+    return mcgen('''
+%(proto)s;
+''',
+                 proto=gen_marshal_proto(name))
 
+def gen_marshal(name, args, rets):
     ret = mcgen('''
 
-%(header)s
+%(proto)s
 {
-    Error *local_err = NULL;
 ''',
-                header=hdr)
-
-    if rets:
-        # FIXME fishy: only pointers are initialized
-        if rets.c_null() == 'NULL':
-            retval = '    %s retval = NULL;' % rets.c_type()
-        else:
-            retval = '    %s retval;' % rets.c_type()
-        ret += mcgen('''
-%(retval)s
-''',
-                     retval=retval)
-
-    if args:
-        ret += gen_visitor_input_containers_decl(args)
-        ret += gen_visitor_input_vars_decl(args) + '\n'
-        ret += gen_visitor_input_block(args) + '\n'
-    else:
-        ret += mcgen('''
-
-    (void)args;
-
-''')
+                proto=gen_marshal_proto(name))
 
+    ret += gen_marshal_vars(args, rets)
+    ret += gen_marshal_input_visit(args)
     ret += gen_call(name, args, rets)
 
     if re.search('^ *goto out;', ret, re.MULTILINE):
@@ -242,7 +233,7 @@ out:
     ret += mcgen('''
     error_propagate(errp, local_err);
 ''')
-    ret += gen_visitor_input_block(args, dealloc=True)
+    ret += gen_marshal_input_visit(args, dealloc=True)
     ret += mcgen('''
 }
 ''')
@@ -296,8 +287,8 @@ class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
         if rets:
             self.defn += gen_marshal_output(name, rets)
         if middle_mode:
-            self.decl += gen_marshal_input_decl(name) + ';\n'
-        self.defn += gen_marshal_input(name, args, rets)
+            self.decl += gen_marshal_decl(name)
+        self.defn += gen_marshal(name, args, rets)
         if not middle_mode:
             self.regy += gen_register_command(name, success_response)
 
-- 
1.9.3




reply via email to

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