Codebase list telepathy-glib / 7ffbde3
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@collabora.co.uk> Simon McVittie 10 years ago
2 changed file(s) with 29 addition(s) and 62 deletion(s). Raw diff Collapse all Expand all
2727 from getopt import gnu_getopt
2828
2929 from libtpcodegen import file_set_contents, key_by_name, u
30 from libglibcodegen import Signature, type_to_gtype, \
31 get_docstring, xml_escape, get_deprecated
30 from libglibcodegen import (Signature, type_to_gtype,
31 get_docstring, xml_escape, get_deprecated, copy_into_gvalue)
3232
3333
3434 NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
204204 self.b(' g_value_unset (args->values + %d);' % i)
205205 self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
206206
207 if gtype == 'G_TYPE_STRING':
208 self.b(' g_value_set_string (args->values + %d, %s);'
209 % (i, name))
210 elif marshaller == 'BOXED':
211 self.b(' g_value_set_boxed (args->values + %d, %s);'
212 % (i, name))
213 elif gtype == 'G_TYPE_UCHAR':
214 self.b(' g_value_set_uchar (args->values + %d, %s);'
215 % (i, name))
216 elif gtype == 'G_TYPE_BOOLEAN':
217 self.b(' g_value_set_boolean (args->values + %d, %s);'
218 % (i, name))
219 elif gtype == 'G_TYPE_INT':
220 self.b(' g_value_set_int (args->values + %d, %s);'
221 % (i, name))
222 elif gtype == 'G_TYPE_UINT':
223 self.b(' g_value_set_uint (args->values + %d, %s);'
224 % (i, name))
225 elif gtype == 'G_TYPE_INT64':
226 self.b(' g_value_set_int (args->values + %d, %s);'
227 % (i, name))
228 elif gtype == 'G_TYPE_UINT64':
229 self.b(' g_value_set_uint64 (args->values + %d, %s);'
230 % (i, name))
231 elif gtype == 'G_TYPE_DOUBLE':
232 self.b(' g_value_set_double (args->values + %d, %s);'
233 % (i, name))
234 else:
235 assert False, ("Don't know how to put %s in a GValue"
236 % gtype)
207 self.b(' ' + copy_into_gvalue('args->values + %d' % i,
208 gtype, marshaller, name))
237209 self.b('')
238210
239211 self.b(' tp_proxy_signal_connection_v0_take_results (sc, args);')
572544 self.b(' g_value_unset (args->values + %d);' % i)
573545 self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
574546
575 if gtype == 'G_TYPE_STRING':
576 self.b(' g_value_take_string (args->values + %d, %s);'
577 % (i, name))
578 elif marshaller == 'BOXED':
579 self.b(' g_value_take_boxed (args->values + %d, %s);'
580 % (i, name))
581 elif gtype == 'G_TYPE_UCHAR':
582 self.b(' g_value_set_uchar (args->values + %d, %s);'
583 % (i, name))
584 elif gtype == 'G_TYPE_BOOLEAN':
585 self.b(' g_value_set_boolean (args->values + %d, %s);'
586 % (i, name))
587 elif gtype == 'G_TYPE_INT':
588 self.b(' g_value_set_int (args->values + %d, %s);'
589 % (i, name))
590 elif gtype == 'G_TYPE_UINT':
591 self.b(' g_value_set_uint (args->values + %d, %s);'
592 % (i, name))
593 elif gtype == 'G_TYPE_INT64':
594 self.b(' g_value_set_int (args->values + %d, %s);'
595 % (i, name))
596 elif gtype == 'G_TYPE_UINT64':
597 self.b(' g_value_set_uint (args->values + %d, %s);'
598 % (i, name))
599 elif gtype == 'G_TYPE_DOUBLE':
600 self.b(' g_value_set_double (args->values + %d, %s);'
601 % (i, name))
602 else:
603 assert False, ("Don't know how to put %s in a GValue"
604 % gtype)
547 self.b(' ' + copy_into_gvalue('args->values + %d' % i,
548 gtype, marshaller, name))
605549
606550 self.b(' tp_proxy_pending_call_v0_take_results (user_data, '
607551 'NULL, args);')
169169
170170 # we just don't know ..
171171 raise Exception("don't know the GType for " + s)
172
173
174 def copy_into_gvalue(gvaluep, gtype, marshaller, name):
175 if gtype == 'G_TYPE_STRING':
176 return 'g_value_set_string (%s, %s);' % (gvaluep, name)
177 elif marshaller == 'BOXED':
178 return 'g_value_set_boxed (%s, %s);' % (gvaluep, name)
179 elif gtype == 'G_TYPE_UCHAR':
180 return 'g_value_set_uchar (%s, %s);' % (gvaluep, name)
181 elif gtype == 'G_TYPE_BOOLEAN':
182 return 'g_value_set_boolean (%s, %s);' % (gvaluep, name)
183 elif gtype == 'G_TYPE_INT':
184 return 'g_value_set_int (%s, %s);' % (gvaluep, name)
185 elif gtype == 'G_TYPE_UINT':
186 return 'g_value_set_uint (%s, %s);' % (gvaluep, name)
187 elif gtype == 'G_TYPE_INT64':
188 return 'g_value_set_int (%s, %s);' % (gvaluep, name)
189 elif gtype == 'G_TYPE_UINT64':
190 return 'g_value_set_uint64 (%s, %s);' % (gvaluep, name)
191 elif gtype == 'G_TYPE_DOUBLE':
192 return 'g_value_set_double (%s, %s);' % (gvaluep, name)
193 else:
194 raise AssertionError("Don't know how to put %s in a GValue" % gtype)