[pygobject/gsoc2009: 92/160] Refactor _wrap_g_struct_info_get_fields
- From: Simon van der Linden <svdlinden src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pygobject/gsoc2009: 92/160] Refactor _wrap_g_struct_info_get_fields
- Date: Fri, 14 Aug 2009 21:30:44 +0000 (UTC)
commit c809be5440f50ef3dbf9fdaadeeb295313019ec0
Author: Simon van der Linden <svdlinden src gnome org>
Date: Mon Aug 3 14:15:35 2009 +0200
Refactor _wrap_g_struct_info_get_fields
gi/pygiinfo.c | 42 ++++++++++++++++++++++++++++++------------
1 files changed, 30 insertions(+), 12 deletions(-)
---
diff --git a/gi/pygiinfo.c b/gi/pygiinfo.c
index 82f3b51..7875291 100644
--- a/gi/pygiinfo.c
+++ b/gi/pygiinfo.c
@@ -1037,6 +1037,7 @@ static PyMethodDef _PyGIFunctionInfo_methods[] = {
{ NULL, NULL, 0 }
};
+
/* RegisteredTypeInfo */
PYGIINFO_DEFINE_TYPE("RegisteredTypeInfo", GIRegisteredTypeInfo, PyGIBaseInfo_Type);
@@ -1046,6 +1047,7 @@ _wrap_g_registered_type_info_get_g_type(PyGIBaseInfo *self)
GType type;
type = g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)self->info);
+
return pyg_type_wrapper_new(type);
}
@@ -1054,28 +1056,44 @@ static PyMethodDef _PyGIRegisteredTypeInfo_methods[] = {
{ NULL, NULL, 0 }
};
+
/* GIStructInfo */
PYGIINFO_DEFINE_TYPE("StructInfo", GIStructInfo, PyGIRegisteredTypeInfo_Type);
static PyObject *
_wrap_g_struct_info_get_fields(PyGIBaseInfo *self)
{
- int i, length;
- PyObject *retval;
+ gssize n_infos;
+ PyObject *infos;
+ gssize i;
- g_base_info_ref(self->info);
- length = g_struct_info_get_n_fields((GIStructInfo*)self->info);
- retval = PyTuple_New(length);
+ n_infos = g_struct_info_get_n_fields((GIStructInfo *)self->info);
- for (i = 0; i < length; i++) {
- GIFieldInfo *field;
- field = g_struct_info_get_field((GIStructInfo*)self->info, i);
- PyTuple_SetItem(retval, i, pyg_info_new(field));
- g_base_info_unref((GIBaseInfo*)field);
+ infos = PyTuple_New(n_infos);
+ if (infos == NULL) {
+ return NULL;
}
- g_base_info_unref(self->info);
- return retval;
+ for (i = 0; i < n_infos; i++) {
+ GIBaseInfo *info;
+ PyObject *py_info;
+
+ info = (GIBaseInfo *)g_struct_info_get_field((GIStructInfo *)self->info, i);
+ g_assert(info != NULL);
+
+ py_info = pyg_info_new(info);
+
+ g_base_info_unref(info);
+
+ if (py_info == NULL) {
+ Py_CLEAR(infos);
+ break;
+ }
+
+ PyTuple_SET_ITEM(infos, i, py_info);
+ }
+
+ return infos;
}
static PyObject *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]