[next] telepathy-glib: glib-client-gen: factor out value_getter

Simon McVittie smcv at kemper.freedesktop.org
Fri Mar 14 12:02:33 PDT 2014


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

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue Mar 11 17:32:24 2014 +0000

glib-client-gen: factor out value_getter

---

 tools/glib-client-gen.py |   50 ++++++----------------------------------------
 tools/libglibcodegen.py  |   22 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 44 deletions(-)

diff --git a/tools/glib-client-gen.py b/tools/glib-client-gen.py
index cd420a1..db87741 100644
--- a/tools/glib-client-gen.py
+++ b/tools/glib-client-gen.py
@@ -29,8 +29,8 @@ 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, copy_into_gvalue)
-
+        get_docstring, xml_escape, get_deprecated, copy_into_gvalue,
+        value_getter)
 
 NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
 
@@ -236,31 +236,12 @@ class Generator(object):
         self.b('  if (callback != NULL)')
         self.b('    callback (g_object_ref (tpproxy),')
 
-        # FIXME: factor out into a function
         for i, arg in enumerate(args):
             name, info, tp_type, elt = arg
             ctype, gtype, marshaller, pointer = info
 
-            if marshaller == 'BOXED':
-                self.b('      g_value_get_boxed (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_STRING':
-                self.b('      g_value_get_string (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UCHAR':
-                self.b('      g_value_get_uchar (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_BOOLEAN':
-                self.b('      g_value_get_boolean (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UINT':
-                self.b('      g_value_get_uint (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_INT':
-                self.b('      g_value_get_int (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UINT64':
-                self.b('      g_value_get_uint64 (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_INT64':
-                self.b('      g_value_get_int64 (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_DOUBLE':
-                self.b('      g_value_get_double (args->values + %d),' % i)
-            else:
-                assert False, "Don't know how to get %s from a GValue" % gtype
+            getter = value_getter(gtype, marshaller)
+            self.b('      %s (args->values + %d),' % (getter, i))
 
         self.b('      user_data,')
         self.b('      weak_object);')
@@ -623,31 +604,12 @@ class Generator(object):
 
         self.b('  callback ((%s) self,' % self.proxy_cls)
 
-        # FIXME: factor out into a function
         for i, arg in enumerate(out_args):
             name, info, tp_type, elt = arg
             ctype, gtype, marshaller, pointer = info
 
-            if marshaller == 'BOXED':
-                self.b('      g_value_get_boxed (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_STRING':
-                self.b('      g_value_get_string (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UCHAR':
-                self.b('      g_value_get_uchar (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_BOOLEAN':
-                self.b('      g_value_get_boolean (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UINT':
-                self.b('      g_value_get_uint (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_INT':
-                self.b('      g_value_get_int (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_UINT64':
-                self.b('      g_value_get_uint64 (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_INT64':
-                self.b('      g_value_get_int64 (args->values + %d),' % i)
-            elif gtype == 'G_TYPE_DOUBLE':
-                self.b('      g_value_get_double (args->values + %d),' % i)
-            else:
-                assert False, "Don't know how to get %s from a GValue" % gtype
+            getter = value_getter(gtype, marshaller)
+            self.b('      %s (args->values + %d),' % (getter, i))
 
         self.b('      error, user_data, weak_object);')
         self.b('')
diff --git a/tools/libglibcodegen.py b/tools/libglibcodegen.py
index 0b703a5..c03544f 100644
--- a/tools/libglibcodegen.py
+++ b/tools/libglibcodegen.py
@@ -193,3 +193,25 @@ def copy_into_gvalue(gvaluep, gtype, marshaller, name):
         return 'g_value_set_double (%s, %s);' % (gvaluep, name)
     else:
         raise AssertionError("Don't know how to put %s in a GValue" % gtype)
+
+def value_getter(gtype, marshaller):
+    if marshaller == 'BOXED':
+        return 'g_value_get_boxed'
+    elif gtype == 'G_TYPE_STRING':
+        return 'g_value_get_string'
+    elif gtype == 'G_TYPE_UCHAR':
+        return 'g_value_get_uchar'
+    elif gtype == 'G_TYPE_BOOLEAN':
+        return 'g_value_get_boolean'
+    elif gtype == 'G_TYPE_UINT':
+        return 'g_value_get_uint'
+    elif gtype == 'G_TYPE_INT':
+        return 'g_value_get_int'
+    elif gtype == 'G_TYPE_UINT64':
+        return 'g_value_get_uint64'
+    elif gtype == 'G_TYPE_INT64':
+        return 'g_value_get_int64'
+    elif gtype == 'G_TYPE_DOUBLE':
+        return 'g_value_get_double'
+    else:
+        raise AssertionError("Don't know how to get %s from a GValue" % marshaller)



More information about the telepathy-commits mailing list