summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2014-03-11 17:32:24 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-03-13 14:25:14 +0000
commite302712edc8c5d3d2d7bc661179d6983cb0847f2 (patch)
tree81ad5f4bf5f36ca6b2251c24e3be7d2b7deff2ee
parent4ece5930f8d60245bf497ad556c0969f4e679da4 (diff)
glib-client-gen: factor out value_getter
-rw-r--r--tools/glib-client-gen.py50
-rw-r--r--tools/libglibcodegen.py22
2 files changed, 28 insertions, 44 deletions
diff --git a/tools/glib-client-gen.py b/tools/glib-client-gen.py
index cd420a16a..db87741d6 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 0b703a5a8..c03544fe2 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)