[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