[pygobject/gsoc2009: 50/160] Get rid of glist_to_pyobject
- From: Simon van der Linden <svdlinden src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pygobject/gsoc2009: 50/160] Get rid of glist_to_pyobject
- Date: Fri, 14 Aug 2009 21:26:17 +0000 (UTC)
commit 7780d19f180ec20ef734f6b783bd1d24ca9d20f6
Author: Simon van der Linden <svdlinden src gnome org>
Date: Wed Jul 22 11:56:32 2009 +0200
Get rid of glist_to_pyobject
gi/pygargument.c | 89 +++++++++++++++++++----------------------------------
1 files changed, 32 insertions(+), 57 deletions(-)
---
diff --git a/gi/pygargument.c b/gi/pygargument.c
index d14851a..dad51f8 100644
--- a/gi/pygargument.c
+++ b/gi/pygargument.c
@@ -695,56 +695,6 @@ array_clean:
return arg;
}
-static PyObject *
-glist_to_pyobject(GITypeTag list_tag, GITypeInfo *type_info, GList *list, GSList *slist)
-{
- PyObject *py_list;
- int i;
- GArgument arg;
- PyObject *child_obj;
-
- if ((py_list = PyList_New(0)) == NULL) {
- g_list_free(list);
- return NULL;
- }
- i = 0;
- if (list_tag == GI_TYPE_TAG_GLIST) {
- for ( ; list != NULL; list = list->next) {
- arg.v_pointer = list->data;
-
- child_obj = pygi_g_argument_to_py_object(arg, type_info);
-
- if (child_obj == NULL) {
- g_list_free(list);
- Py_DECREF(py_list);
- return NULL;
- }
- PyList_Append(py_list, child_obj);
- Py_DECREF(child_obj);
-
- ++i;
- }
- } else {
- for ( ; slist != NULL; slist = slist->next) {
- arg.v_pointer = slist->data;
-
- child_obj = pygi_g_argument_to_py_object(arg, type_info);
-
- if (child_obj == NULL) {
- g_list_free(list);
- Py_DECREF(py_list);
- return NULL;
- }
- PyList_Append(py_list, child_obj);
- Py_DECREF(child_obj);
-
- ++i;
- }
- }
- g_list_free(list);
- return py_list;
-}
-
PyObject *
pygi_g_argument_to_py_object(GArgument arg, GITypeInfo *type_info)
{
@@ -947,13 +897,38 @@ struct_error_clean:
case GI_TYPE_TAG_GLIST:
case GI_TYPE_TAG_GSLIST:
{
- GITypeInfo *param_info;
- param_info = g_type_info_get_param_type(type_info, 0);
- g_assert(param_info != NULL);
- object = glist_to_pyobject(type_tag,
- param_info,
- type_tag == GI_TYPE_TAG_GLIST ? arg.v_pointer : NULL,
- type_tag == GI_TYPE_TAG_GSLIST ? arg.v_pointer : NULL);
+ GSList *list;
+ gsize length;
+ GITypeInfo *item_type_info;
+ gsize i;
+
+ list = arg.v_pointer;
+ length = g_slist_length(list);
+
+ object = PyList_New(length);
+ if (object == NULL) {
+ break;
+ }
+
+ item_type_info = g_type_info_get_param_type(type_info, 0);
+
+ for (i = 0; list != NULL; list = (GSList *)list->next, i++) {
+ GArgument item;
+ PyObject *py_item;
+
+ item.v_pointer = list->data;
+
+ py_item = pygi_g_argument_to_py_object(item, item_type_info);
+ if (py_item == NULL) {
+ Py_DECREF(object);
+ object = NULL;
+ break;
+ }
+
+ PyList_SET_ITEM(object, i, py_item);
+ }
+
+ g_base_info_unref((GIBaseInfo *)item_type_info);
break;
}
case GI_TYPE_TAG_GTYPE:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]