[next] telepathy-glib: codegen: factor out copy_into_gvalue

Simon McVittie smcv at kemper.freedesktop.org
Mon Nov 4 14:25:24 CET 2013


Module: telepathy-glib
Branch: next
Commit: 7ffbde3f23170ccc219ca969052efaf9c9a535bf
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=7ffbde3f23170ccc219ca969052efaf9c9a535bf

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Oct 21 16:50:53 2013 +0100

codegen: factor out copy_into_gvalue

I needed this for TpExportable (which is still work in progress),
but it's already a small code reduction.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=59024
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 tools/glib-client-gen.py |   68 ++++-----------------------------------------
 tools/libglibcodegen.py  |   23 +++++++++++++++
 2 files changed, 29 insertions(+), 62 deletions(-)

diff --git a/tools/glib-client-gen.py b/tools/glib-client-gen.py
index 7d67c71..a0fecf0 100644
--- a/tools/glib-client-gen.py
+++ b/tools/glib-client-gen.py
@@ -28,8 +28,8 @@ import xml.dom.minidom
 from getopt import gnu_getopt
 
 from libtpcodegen import file_set_contents, key_by_name, u
-from libglibcodegen import Signature, type_to_gtype, \
-        get_docstring, xml_escape, get_deprecated
+from libglibcodegen import (Signature, type_to_gtype,
+        get_docstring, xml_escape, get_deprecated, copy_into_gvalue)
 
 
 NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
@@ -205,36 +205,8 @@ class Generator(object):
                 self.b('  g_value_unset (args->values + %d);' % i)
                 self.b('  g_value_init (args->values + %d, %s);' % (i, gtype))
 
-                if gtype == 'G_TYPE_STRING':
-                    self.b('  g_value_set_string (args->values + %d, %s);'
-                           % (i, name))
-                elif marshaller == 'BOXED':
-                    self.b('  g_value_set_boxed (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_UCHAR':
-                    self.b('  g_value_set_uchar (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_BOOLEAN':
-                    self.b('  g_value_set_boolean (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_INT':
-                    self.b('  g_value_set_int (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_UINT':
-                    self.b('  g_value_set_uint (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_INT64':
-                    self.b('  g_value_set_int (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_UINT64':
-                    self.b('  g_value_set_uint64 (args->values + %d, %s);'
-                           % (i, name))
-                elif gtype == 'G_TYPE_DOUBLE':
-                    self.b('  g_value_set_double (args->values + %d, %s);'
-                           % (i, name))
-                else:
-                    assert False, ("Don't know how to put %s in a GValue"
-                                   % gtype)
+                self.b('  ' + copy_into_gvalue('args->values + %d' % i,
+                    gtype, marshaller, name))
                 self.b('')
 
             self.b('  tp_proxy_signal_connection_v0_take_results (sc, args);')
@@ -573,36 +545,8 @@ class Generator(object):
                 self.b('  g_value_unset (args->values + %d);' % i)
                 self.b('  g_value_init (args->values + %d, %s);' % (i, gtype))
 
-                if gtype == 'G_TYPE_STRING':
-                    self.b('  g_value_take_string (args->values + %d, %s);'
-                           % (i, name))
-                elif marshaller == 'BOXED':
-                    self.b('  g_value_take_boxed (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_UCHAR':
-                    self.b('  g_value_set_uchar (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_BOOLEAN':
-                    self.b('  g_value_set_boolean (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_INT':
-                    self.b('  g_value_set_int (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_UINT':
-                    self.b('  g_value_set_uint (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_INT64':
-                    self.b('  g_value_set_int (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_UINT64':
-                    self.b('  g_value_set_uint (args->values + %d, %s);'
-                            % (i, name))
-                elif gtype == 'G_TYPE_DOUBLE':
-                    self.b('  g_value_set_double (args->values + %d, %s);'
-                            % (i, name))
-                else:
-                    assert False, ("Don't know how to put %s in a GValue"
-                                   % gtype)
+                self.b('  ' + copy_into_gvalue('args->values + %d' % i,
+                    gtype, marshaller, name))
 
             self.b('  tp_proxy_pending_call_v0_take_results (user_data, '
                    'NULL, args);')
diff --git a/tools/libglibcodegen.py b/tools/libglibcodegen.py
index 6cd1a62..0b703a5 100644
--- a/tools/libglibcodegen.py
+++ b/tools/libglibcodegen.py
@@ -170,3 +170,26 @@ def type_to_gtype(s):
 
     # we just don't know ..
     raise Exception("don't know the GType for " + s)
+
+
+def copy_into_gvalue(gvaluep, gtype, marshaller, name):
+    if gtype == 'G_TYPE_STRING':
+        return 'g_value_set_string (%s, %s);' % (gvaluep, name)
+    elif marshaller == 'BOXED':
+        return 'g_value_set_boxed (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_UCHAR':
+        return 'g_value_set_uchar (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_BOOLEAN':
+        return 'g_value_set_boolean (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_INT':
+        return 'g_value_set_int (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_UINT':
+        return 'g_value_set_uint (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_INT64':
+        return 'g_value_set_int (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_UINT64':
+        return 'g_value_set_uint64 (%s, %s);' % (gvaluep, name)
+    elif gtype == 'G_TYPE_DOUBLE':
+        return 'g_value_set_double (%s, %s);' % (gvaluep, name)
+    else:
+        raise AssertionError("Don't know how to put %s in a GValue" % gtype)



More information about the telepathy-commits mailing list