1 /* -*- Mode: C; c-basic-offset: 4 -*-
2 * vim: tabstop=4 shiftwidth=4 expandtab
4 * Copyright (C) 2005-2009 Johan Dahlin <johan@gnome.org>
6 * pygi-info.c: GI.*Info wrappers.
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
24 #include "pygi-private.h"
25 #include "pygi-cache.h"
27 #include <pygobject.h>
28 #include <pyglib-python-compat.h>
33 _base_info_dealloc (PyGIBaseInfo *self)
35 PyObject_GC_UnTrack ( (PyObject *) self);
37 PyObject_ClearWeakRefs ( (PyObject *) self);
39 g_base_info_unref (self->info);
41 _pygi_callable_cache_free(self->cache);
43 Py_TYPE( (PyObject *) self)->tp_free ( (PyObject *) self);
47 _base_info_traverse (PyGIBaseInfo *self,
55 _base_info_repr (PyGIBaseInfo *self)
57 return PYGLIB_PyUnicode_FromFormat ("<%s object (%s) at 0x%p>",
58 Py_TYPE( (PyObject *) self)->tp_name,
59 g_base_info_get_name (self->info),
64 _base_info_richcompare (PyGIBaseInfo *self, PyObject *other, int op)
67 GIBaseInfo *other_info;
69 if (!PyObject_TypeCheck(other, &PyGIBaseInfo_Type)) {
70 Py_INCREF(Py_NotImplemented);
71 return Py_NotImplemented;
74 other_info = ((PyGIBaseInfo *)other)->info;
78 res = g_base_info_equal (self->info, other_info) ? Py_True : Py_False;
81 res = g_base_info_equal (self->info, other_info) ? Py_False : Py_True;
84 res = Py_NotImplemented;
91 static PyMethodDef _PyGIBaseInfo_methods[];
93 PYGLIB_DEFINE_TYPE("gi.BaseInfo", PyGIBaseInfo_Type, PyGIBaseInfo);
96 _wrap_g_base_info_get_name (PyGIBaseInfo *self)
98 /* It may be better to use keyword.iskeyword(); keep in sync with
99 * python -c 'import keyword; print(keyword.kwlist)' */
100 #if PY_VERSION_HEX < 0x03000000
102 static const gchar* keywords[] = {"and", "as", "assert", "break", "class",
103 "continue", "def", "del", "elif", "else", "except", "exec", "finally",
104 "for", "from", "global", "if", "import", "in", "is", "lambda", "not",
105 "or", "pass", "print", "raise", "return", "try", "while", "with",
107 #elif PY_VERSION_HEX < 0x04000000
108 /* Python 3.x; note that we explicitly keep "print"; it is not a keyword
109 * any more, but we do not want to break API between Python versions */
110 static const gchar* keywords[] = {"False", "None", "True", "and", "as",
111 "assert", "break", "class", "continue", "def", "del", "elif", "else",
112 "except", "finally", "for", "from", "global", "if", "import", "in",
113 "is", "lambda", "nonlocal", "not", "or", "pass", "raise", "return",
114 "try", "while", "with", "yield",
117 #error Need keyword list for this major Python version
120 const gchar *name, **i;
122 name = g_base_info_get_name (self->info);
124 /* escape keywords */
125 for (i = keywords; *i != NULL; ++i) {
126 if (strcmp (name, *i) == 0) {
127 gchar *escaped = g_strconcat (name, "_", NULL);
128 PyObject *obj = PYGLIB_PyUnicode_FromString (escaped);
134 return PYGLIB_PyUnicode_FromString (name);
138 _wrap_g_base_info_get_name_unescaped (PyGIBaseInfo *self)
140 return PYGLIB_PyUnicode_FromString (g_base_info_get_name (self->info));
144 _wrap_g_base_info_get_namespace (PyGIBaseInfo *self)
146 return PYGLIB_PyUnicode_FromString (g_base_info_get_namespace (self->info));
150 _wrap_g_base_info_get_container (PyGIBaseInfo *self)
154 info = g_base_info_get_container (self->info);
160 return _pygi_info_new (info);
164 static PyMethodDef _PyGIBaseInfo_methods[] = {
165 { "get_name", (PyCFunction) _wrap_g_base_info_get_name, METH_NOARGS },
166 { "get_name_unescaped", (PyCFunction) _wrap_g_base_info_get_name_unescaped, METH_NOARGS },
167 { "get_namespace", (PyCFunction) _wrap_g_base_info_get_namespace, METH_NOARGS },
168 { "get_container", (PyCFunction) _wrap_g_base_info_get_container, METH_NOARGS },
173 _pygi_info_new (GIBaseInfo *info)
175 GIInfoType info_type;
176 PyTypeObject *type = NULL;
179 info_type = g_base_info_get_type (info);
183 case GI_INFO_TYPE_INVALID:
184 PyErr_SetString (PyExc_RuntimeError, "Invalid info type");
186 case GI_INFO_TYPE_FUNCTION:
187 type = &PyGIFunctionInfo_Type;
189 case GI_INFO_TYPE_CALLBACK:
190 type = &PyGICallbackInfo_Type;
192 case GI_INFO_TYPE_STRUCT:
193 type = &PyGIStructInfo_Type;
195 case GI_INFO_TYPE_BOXED:
196 type = &PyGIBoxedInfo_Type;
198 case GI_INFO_TYPE_ENUM:
199 case GI_INFO_TYPE_FLAGS:
200 type = &PyGIEnumInfo_Type;
202 case GI_INFO_TYPE_OBJECT:
203 type = &PyGIObjectInfo_Type;
205 case GI_INFO_TYPE_INTERFACE:
206 type = &PyGIInterfaceInfo_Type;
208 case GI_INFO_TYPE_CONSTANT:
209 type = &PyGIConstantInfo_Type;
211 case GI_INFO_TYPE_UNION:
212 type = &PyGIUnionInfo_Type;
214 case GI_INFO_TYPE_VALUE:
215 type = &PyGIValueInfo_Type;
217 case GI_INFO_TYPE_SIGNAL:
218 type = &PyGISignalInfo_Type;
220 case GI_INFO_TYPE_VFUNC:
221 type = &PyGIVFuncInfo_Type;
223 case GI_INFO_TYPE_PROPERTY:
224 type = &PyGIPropertyInfo_Type;
226 case GI_INFO_TYPE_FIELD:
227 type = &PyGIFieldInfo_Type;
229 case GI_INFO_TYPE_ARG:
230 type = &PyGIArgInfo_Type;
232 case GI_INFO_TYPE_TYPE:
233 type = &PyGITypeInfo_Type;
235 case GI_INFO_TYPE_UNRESOLVED:
236 type = &PyGIUnresolvedInfo_Type;
239 g_assert_not_reached();
243 self = (PyGIBaseInfo *) type->tp_alloc (type, 0);
248 self->info = g_base_info_ref (info);
250 return (PyObject *) self;
254 _pygi_object_get_gi_info (PyObject *object,
258 GIBaseInfo *info = NULL;
260 py_info = PyObject_GetAttrString (object, "__info__");
261 if (py_info == NULL) {
264 if (!PyObject_TypeCheck (py_info, type)) {
265 PyErr_Format (PyExc_TypeError, "attribute '__info__' must be %s, not %s",
266 type->tp_name, Py_TYPE(&py_info)->tp_name);
270 info = ( (PyGIBaseInfo *) py_info)->info;
271 g_base_info_ref (info);
281 PYGLIB_DEFINE_TYPE ("gi.CallableInfo", PyGICallableInfo_Type, PyGIBaseInfo);
284 _wrap_g_callable_info_get_arguments (PyGIBaseInfo *self)
290 n_infos = g_callable_info_get_n_args ( (GICallableInfo *) self->info);
292 infos = PyTuple_New (n_infos);
297 for (i = 0; i < n_infos; i++) {
301 info = (GIBaseInfo *) g_callable_info_get_arg ( (GICallableInfo *) self->info, i);
302 g_assert (info != NULL);
304 py_info = _pygi_info_new (info);
306 g_base_info_unref (info);
308 if (py_info == NULL) {
313 PyTuple_SET_ITEM (infos, i, py_info);
319 static PyMethodDef _PyGICallableInfo_methods[] = {
320 { "invoke", (PyCFunction) _wrap_g_callable_info_invoke, METH_VARARGS | METH_KEYWORDS },
321 { "get_arguments", (PyCFunction) _wrap_g_callable_info_get_arguments, METH_NOARGS },
326 PYGLIB_DEFINE_TYPE ("gi.CallbackInfo", PyGICallbackInfo_Type, PyGIBaseInfo);
328 static PyMethodDef _PyGICallbackInfo_methods[] = {
333 PYGLIB_DEFINE_TYPE ("gi.BoxedInfo", PyGIBoxedInfo_Type, PyGIBaseInfo);
335 static PyMethodDef _PyGIBoxedInfo_methods[] = {
339 /* ErrorDomainInfo */
340 PYGLIB_DEFINE_TYPE ("gi.ErrorDomainInfo", PyGIErrorDomainInfo_Type, PyGIBaseInfo);
342 static PyMethodDef _PyGIErrorDomainInfo_methods[] = {
347 PYGLIB_DEFINE_TYPE ("gi.SignalInfo", PyGISignalInfo_Type, PyGIBaseInfo);
349 static PyMethodDef _PyGISignalInfo_methods[] = {
354 PYGLIB_DEFINE_TYPE ("gi.PropertyInfo", PyGIPropertyInfo_Type, PyGIBaseInfo);
356 static PyMethodDef _PyGIPropertyInfo_methods[] = {
362 PYGLIB_DEFINE_TYPE ("gi.ArgInfo", PyGIArgInfo_Type, PyGIBaseInfo);
365 _wrap_g_arg_info_get_direction (PyGIBaseInfo *self)
367 return PyLong_FromLong (
368 g_arg_info_get_direction ((GIArgInfo*)self->info) );
372 _wrap_g_arg_info_is_caller_allocates (PyGIBaseInfo *self)
374 return PyBool_FromLong (
375 g_arg_info_is_caller_allocates ((GIArgInfo*)self->info) );
379 _wrap_g_arg_info_is_return_value (PyGIBaseInfo *self)
381 return PyBool_FromLong (
382 g_arg_info_is_return_value ((GIArgInfo*)self->info) );
386 _wrap_g_arg_info_is_optional (PyGIBaseInfo *self)
388 return PyBool_FromLong (
389 g_arg_info_is_optional ((GIArgInfo*)self->info) );
393 _wrap_g_arg_info_may_be_null (PyGIBaseInfo *self)
395 return PyBool_FromLong (
396 g_arg_info_may_be_null ((GIArgInfo*)self->info) );
399 /* _g_arg_get_pytype_hint
401 * Returns new value reference to a string hinting at the python type
402 * which can be used for the given gi argument info.
405 _g_arg_get_pytype_hint (PyGIBaseInfo *self)
407 GIArgInfo *arg_info = (GIArgInfo*)self->info;
408 GITypeInfo type_info;
409 g_arg_info_load_type(arg_info, &type_info);
410 GITypeTag type_tag = g_type_info_get_tag(&type_info);
412 /* First attempt getting a python type object. */
413 PyObject *py_type = _pygi_get_py_type_hint(type_tag);
414 if (py_type != Py_None && PyObject_HasAttrString(py_type, "__name__")) {
415 PyObject *name = PyObject_GetAttrString(py_type, "__name__");
420 if (type_tag == GI_TYPE_TAG_INTERFACE) {
421 GIBaseInfo *iface = g_type_info_get_interface(&type_info);
422 gchar *name = g_strdup_printf("%s.%s",
423 g_base_info_get_namespace(iface),
424 g_base_info_get_name (iface));
425 g_base_info_unref(iface);
426 PyObject *py_string = PYGLIB_PyUnicode_FromString(name);
430 return PYGLIB_PyUnicode_FromString(g_type_tag_to_string(type_tag));
434 static PyMethodDef _PyGIArgInfo_methods[] = {
435 { "get_direction", (PyCFunction) _wrap_g_arg_info_get_direction, METH_NOARGS },
436 { "is_caller_allocates", (PyCFunction) _wrap_g_arg_info_is_caller_allocates, METH_NOARGS },
437 { "is_return_value", (PyCFunction) _wrap_g_arg_info_is_return_value, METH_NOARGS },
438 { "is_optional", (PyCFunction) _wrap_g_arg_info_is_optional, METH_NOARGS },
439 { "may_be_null", (PyCFunction) _wrap_g_arg_info_may_be_null, METH_NOARGS },
440 { "get_pytype_hint", (PyCFunction) _g_arg_get_pytype_hint, METH_NOARGS },
446 PYGLIB_DEFINE_TYPE ("gi.TypeInfo", PyGITypeInfo_Type, PyGIBaseInfo);
448 static PyMethodDef _PyGITypeInfo_methods[] = {
454 PYGLIB_DEFINE_TYPE ("gi.FunctionInfo", PyGIFunctionInfo_Type, PyGIBaseInfo);
457 _wrap_g_function_info_is_constructor (PyGIBaseInfo *self)
459 GIFunctionInfoFlags flags;
460 gboolean is_constructor;
462 flags = g_function_info_get_flags ( (GIFunctionInfo*) self->info);
463 is_constructor = flags & GI_FUNCTION_IS_CONSTRUCTOR;
465 return PyBool_FromLong (is_constructor);
469 _wrap_g_function_info_is_method (PyGIBaseInfo *self)
471 GIFunctionInfoFlags flags;
474 flags = g_function_info_get_flags ( (GIFunctionInfo*) self->info);
475 is_method = flags & GI_FUNCTION_IS_METHOD;
477 return PyBool_FromLong (is_method);
481 _pygi_g_type_tag_size (GITypeTag type_tag)
486 case GI_TYPE_TAG_BOOLEAN:
487 size = sizeof (gboolean);
489 case GI_TYPE_TAG_INT8:
490 case GI_TYPE_TAG_UINT8:
491 size = sizeof (gint8);
493 case GI_TYPE_TAG_INT16:
494 case GI_TYPE_TAG_UINT16:
495 size = sizeof (gint16);
497 case GI_TYPE_TAG_INT32:
498 case GI_TYPE_TAG_UINT32:
499 size = sizeof (gint32);
501 case GI_TYPE_TAG_INT64:
502 case GI_TYPE_TAG_UINT64:
503 size = sizeof (gint64);
505 case GI_TYPE_TAG_FLOAT:
506 size = sizeof (gfloat);
508 case GI_TYPE_TAG_DOUBLE:
509 size = sizeof (gdouble);
511 case GI_TYPE_TAG_GTYPE:
512 size = sizeof (GType);
514 case GI_TYPE_TAG_UNICHAR:
515 size = sizeof (gunichar);
517 case GI_TYPE_TAG_VOID:
518 case GI_TYPE_TAG_UTF8:
519 case GI_TYPE_TAG_FILENAME:
520 case GI_TYPE_TAG_ARRAY:
521 case GI_TYPE_TAG_INTERFACE:
522 case GI_TYPE_TAG_GLIST:
523 case GI_TYPE_TAG_GSLIST:
524 case GI_TYPE_TAG_GHASH:
525 case GI_TYPE_TAG_ERROR:
526 PyErr_Format (PyExc_TypeError,
527 "Unable to know the size (assuming %s is not a pointer)",
528 g_type_tag_to_string (type_tag));
536 _pygi_g_type_info_size (GITypeInfo *type_info)
542 type_tag = g_type_info_get_tag (type_info);
544 case GI_TYPE_TAG_BOOLEAN:
545 case GI_TYPE_TAG_INT8:
546 case GI_TYPE_TAG_UINT8:
547 case GI_TYPE_TAG_INT16:
548 case GI_TYPE_TAG_UINT16:
549 case GI_TYPE_TAG_INT32:
550 case GI_TYPE_TAG_UINT32:
551 case GI_TYPE_TAG_INT64:
552 case GI_TYPE_TAG_UINT64:
553 case GI_TYPE_TAG_FLOAT:
554 case GI_TYPE_TAG_DOUBLE:
555 case GI_TYPE_TAG_GTYPE:
556 case GI_TYPE_TAG_UNICHAR:
557 size = _pygi_g_type_tag_size (type_tag);
560 case GI_TYPE_TAG_INTERFACE:
563 GIInfoType info_type;
565 info = g_type_info_get_interface (type_info);
566 info_type = g_base_info_get_type (info);
569 case GI_INFO_TYPE_STRUCT:
570 if (g_type_info_is_pointer (type_info)) {
571 size = sizeof (gpointer);
573 size = g_struct_info_get_size ( (GIStructInfo *) info);
576 case GI_INFO_TYPE_UNION:
577 if (g_type_info_is_pointer (type_info)) {
578 size = sizeof (gpointer);
580 size = g_union_info_get_size ( (GIUnionInfo *) info);
583 case GI_INFO_TYPE_ENUM:
584 case GI_INFO_TYPE_FLAGS:
585 if (g_type_info_is_pointer (type_info)) {
586 size = sizeof (gpointer);
590 type_tag = g_enum_info_get_storage_type ( (GIEnumInfo *) info);
591 size = _pygi_g_type_tag_size (type_tag);
594 case GI_INFO_TYPE_BOXED:
595 case GI_INFO_TYPE_OBJECT:
596 case GI_INFO_TYPE_INTERFACE:
597 case GI_INFO_TYPE_CALLBACK:
598 size = sizeof (gpointer);
600 case GI_INFO_TYPE_VFUNC:
601 case GI_INFO_TYPE_INVALID:
602 case GI_INFO_TYPE_FUNCTION:
603 case GI_INFO_TYPE_CONSTANT:
604 case GI_INFO_TYPE_VALUE:
605 case GI_INFO_TYPE_SIGNAL:
606 case GI_INFO_TYPE_PROPERTY:
607 case GI_INFO_TYPE_FIELD:
608 case GI_INFO_TYPE_ARG:
609 case GI_INFO_TYPE_TYPE:
610 case GI_INFO_TYPE_UNRESOLVED:
612 g_assert_not_reached();
616 g_base_info_unref (info);
619 case GI_TYPE_TAG_ARRAY:
620 case GI_TYPE_TAG_VOID:
621 case GI_TYPE_TAG_UTF8:
622 case GI_TYPE_TAG_FILENAME:
623 case GI_TYPE_TAG_GLIST:
624 case GI_TYPE_TAG_GSLIST:
625 case GI_TYPE_TAG_GHASH:
626 case GI_TYPE_TAG_ERROR:
627 size = sizeof (gpointer);
634 static PyMethodDef _PyGIFunctionInfo_methods[] = {
635 { "is_constructor", (PyCFunction) _wrap_g_function_info_is_constructor, METH_NOARGS },
636 { "is_method", (PyCFunction) _wrap_g_function_info_is_method, METH_NOARGS },
641 /* RegisteredTypeInfo */
642 PYGLIB_DEFINE_TYPE ("gi.RegisteredTypeInfo", PyGIRegisteredTypeInfo_Type, PyGIBaseInfo);
645 _wrap_g_registered_type_info_get_g_type (PyGIBaseInfo *self)
649 type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) self->info);
651 return pyg_type_wrapper_new (type);
654 static PyMethodDef _PyGIRegisteredTypeInfo_methods[] = {
655 { "get_g_type", (PyCFunction) _wrap_g_registered_type_info_get_g_type, METH_NOARGS },
661 PYGLIB_DEFINE_TYPE ("StructInfo", PyGIStructInfo_Type, PyGIBaseInfo);
664 _get_fields (PyGIBaseInfo *self, GIInfoType info_type)
671 case GI_INFO_TYPE_STRUCT:
672 n_infos = g_struct_info_get_n_fields ( (GIStructInfo *) self->info);
674 case GI_INFO_TYPE_OBJECT:
675 n_infos = g_object_info_get_n_fields ( (GIObjectInfo *) self->info);
678 g_assert_not_reached();
681 infos = PyTuple_New (n_infos);
686 for (i = 0; i < n_infos; i++) {
691 case GI_INFO_TYPE_STRUCT:
692 info = (GIBaseInfo *) g_struct_info_get_field ( (GIStructInfo *) self->info, i);
694 case GI_INFO_TYPE_OBJECT:
695 info = (GIBaseInfo *) g_object_info_get_field ( (GIObjectInfo *) self->info, i);
698 g_assert_not_reached();
700 g_assert (info != NULL);
702 py_info = _pygi_info_new (info);
704 g_base_info_unref (info);
706 if (py_info == NULL) {
711 PyTuple_SET_ITEM (infos, i, py_info);
718 _get_methods (PyGIBaseInfo *self, GIInfoType info_type)
725 case GI_INFO_TYPE_STRUCT:
726 n_infos = g_struct_info_get_n_methods ( (GIStructInfo *) self->info);
728 case GI_INFO_TYPE_OBJECT:
729 n_infos = g_object_info_get_n_methods ( (GIObjectInfo *) self->info);
732 g_assert_not_reached();
735 infos = PyTuple_New (n_infos);
740 for (i = 0; i < n_infos; i++) {
745 case GI_INFO_TYPE_STRUCT:
746 info = (GIBaseInfo *) g_struct_info_get_method ( (GIStructInfo *) self->info, i);
748 case GI_INFO_TYPE_OBJECT:
749 info = (GIBaseInfo *) g_object_info_get_method ( (GIObjectInfo *) self->info, i);
752 g_assert_not_reached();
754 g_assert (info != NULL);
756 py_info = _pygi_info_new (info);
758 g_base_info_unref (info);
760 if (py_info == NULL) {
765 PyTuple_SET_ITEM (infos, i, py_info);
772 _get_constants (PyGIBaseInfo *self, GIInfoType info_type)
779 case GI_INFO_TYPE_INTERFACE:
780 n_infos = g_interface_info_get_n_constants ( (GIInterfaceInfo *) self->info);
782 case GI_INFO_TYPE_OBJECT:
783 n_infos = g_object_info_get_n_constants ( (GIObjectInfo *) self->info);
786 g_assert_not_reached();
789 infos = PyTuple_New (n_infos);
794 for (i = 0; i < n_infos; i++) {
799 case GI_INFO_TYPE_INTERFACE:
800 info = (GIBaseInfo *) g_interface_info_get_constant ( (GIInterfaceInfo *) self->info, i);
802 case GI_INFO_TYPE_OBJECT:
803 info = (GIBaseInfo *) g_object_info_get_constant ( (GIObjectInfo *) self->info, i);
806 g_assert_not_reached();
808 g_assert (info != NULL);
810 py_info = _pygi_info_new (info);
812 g_base_info_unref (info);
814 if (py_info == NULL) {
819 PyTuple_SET_ITEM (infos, i, py_info);
826 _get_vfuncs (PyGIBaseInfo *self, GIInfoType info_type)
833 case GI_INFO_TYPE_INTERFACE:
834 n_infos = g_interface_info_get_n_vfuncs ( (GIInterfaceInfo *) self->info);
836 case GI_INFO_TYPE_OBJECT:
837 n_infos = g_object_info_get_n_vfuncs ( (GIObjectInfo *) self->info);
840 g_assert_not_reached();
843 infos = PyTuple_New (n_infos);
848 for (i = 0; i < n_infos; i++) {
853 case GI_INFO_TYPE_INTERFACE:
854 info = (GIBaseInfo *) g_interface_info_get_vfunc ( (GIInterfaceInfo *) self->info, i);
856 case GI_INFO_TYPE_OBJECT:
857 info = (GIBaseInfo *) g_object_info_get_vfunc ( (GIObjectInfo *) self->info, i);
860 g_assert_not_reached();
862 g_assert (info != NULL);
864 py_info = _pygi_info_new (info);
866 g_base_info_unref (info);
868 if (py_info == NULL) {
873 PyTuple_SET_ITEM (infos, i, py_info);
880 _wrap_g_struct_info_get_fields (PyGIBaseInfo *self)
882 return _get_fields (self, GI_INFO_TYPE_STRUCT);
886 _wrap_g_struct_info_get_methods (PyGIBaseInfo *self)
888 return _get_methods (self, GI_INFO_TYPE_STRUCT);
891 static PyMethodDef _PyGIStructInfo_methods[] = {
892 { "get_fields", (PyCFunction) _wrap_g_struct_info_get_fields, METH_NOARGS },
893 { "get_methods", (PyCFunction) _wrap_g_struct_info_get_methods, METH_NOARGS },
898 pygi_g_struct_info_is_simple (GIStructInfo *struct_info)
906 n_field_infos = g_struct_info_get_n_fields (struct_info);
908 for (i = 0; i < n_field_infos && is_simple; i++) {
909 GIFieldInfo *field_info;
910 GITypeInfo *field_type_info;
912 field_info = g_struct_info_get_field (struct_info, i);
913 field_type_info = g_field_info_get_type (field_info);
915 GITypeTag field_type_tag;
917 field_type_tag = g_type_info_get_tag (field_type_info);
919 switch (field_type_tag) {
920 case GI_TYPE_TAG_BOOLEAN:
921 case GI_TYPE_TAG_INT8:
922 case GI_TYPE_TAG_UINT8:
923 case GI_TYPE_TAG_INT16:
924 case GI_TYPE_TAG_UINT16:
925 case GI_TYPE_TAG_INT32:
926 case GI_TYPE_TAG_UINT32:
927 case GI_TYPE_TAG_INT64:
928 case GI_TYPE_TAG_UINT64:
929 case GI_TYPE_TAG_FLOAT:
930 case GI_TYPE_TAG_DOUBLE:
931 case GI_TYPE_TAG_UNICHAR:
932 if (g_type_info_is_pointer (field_type_info)) {
936 case GI_TYPE_TAG_VOID:
937 case GI_TYPE_TAG_GTYPE:
938 case GI_TYPE_TAG_ERROR:
939 case GI_TYPE_TAG_UTF8:
940 case GI_TYPE_TAG_FILENAME:
941 case GI_TYPE_TAG_ARRAY:
942 case GI_TYPE_TAG_GLIST:
943 case GI_TYPE_TAG_GSLIST:
944 case GI_TYPE_TAG_GHASH:
947 case GI_TYPE_TAG_INTERFACE:
950 GIInfoType info_type;
952 info = g_type_info_get_interface (field_type_info);
953 info_type = g_base_info_get_type (info);
956 case GI_INFO_TYPE_STRUCT:
957 if (g_type_info_is_pointer (field_type_info)) {
960 is_simple = pygi_g_struct_info_is_simple ( (GIStructInfo *) info);
963 case GI_INFO_TYPE_UNION:
967 case GI_INFO_TYPE_ENUM:
968 case GI_INFO_TYPE_FLAGS:
969 if (g_type_info_is_pointer (field_type_info)) {
973 case GI_INFO_TYPE_BOXED:
974 case GI_INFO_TYPE_OBJECT:
975 case GI_INFO_TYPE_CALLBACK:
976 case GI_INFO_TYPE_INTERFACE:
979 case GI_INFO_TYPE_VFUNC:
980 case GI_INFO_TYPE_INVALID:
981 case GI_INFO_TYPE_FUNCTION:
982 case GI_INFO_TYPE_CONSTANT:
983 case GI_INFO_TYPE_VALUE:
984 case GI_INFO_TYPE_SIGNAL:
985 case GI_INFO_TYPE_PROPERTY:
986 case GI_INFO_TYPE_FIELD:
987 case GI_INFO_TYPE_ARG:
988 case GI_INFO_TYPE_TYPE:
989 case GI_INFO_TYPE_UNRESOLVED:
991 g_assert_not_reached();
995 g_base_info_unref (info);
1000 g_base_info_unref ( (GIBaseInfo *) field_type_info);
1001 g_base_info_unref ( (GIBaseInfo *) field_info);
1009 PYGLIB_DEFINE_TYPE ("gi.EnumInfo", PyGIEnumInfo_Type, PyGIBaseInfo);
1012 _wrap_g_enum_info_get_values (PyGIBaseInfo *self)
1018 n_infos = g_enum_info_get_n_values ( (GIEnumInfo *) self->info);
1020 infos = PyTuple_New (n_infos);
1021 if (infos == NULL) {
1025 for (i = 0; i < n_infos; i++) {
1029 info = (GIBaseInfo *) g_enum_info_get_value ( (GIEnumInfo *) self->info, i);
1030 g_assert (info != NULL);
1032 py_info = _pygi_info_new (info);
1034 g_base_info_unref (info);
1036 if (py_info == NULL) {
1041 PyTuple_SET_ITEM (infos, i, py_info);
1048 _wrap_g_enum_info_is_flags (PyGIBaseInfo *self)
1050 GIInfoType info_type = g_base_info_get_type ((GIBaseInfo *) self->info);
1052 if (info_type == GI_INFO_TYPE_ENUM) {
1054 } else if (info_type == GI_INFO_TYPE_FLAGS) {
1057 g_assert_not_reached();
1061 static PyMethodDef _PyGIEnumInfo_methods[] = {
1062 { "get_values", (PyCFunction) _wrap_g_enum_info_get_values, METH_NOARGS },
1063 { "is_flags", (PyCFunction) _wrap_g_enum_info_is_flags, METH_NOARGS },
1069 PYGLIB_DEFINE_TYPE ("ObjectInfo", PyGIObjectInfo_Type, PyGIBaseInfo);
1072 _wrap_g_object_info_get_parent (PyGIBaseInfo *self)
1077 info = (GIBaseInfo *) g_object_info_get_parent ( (GIObjectInfo*) self->info);
1083 py_info = _pygi_info_new (info);
1085 g_base_info_unref (info);
1091 _wrap_g_object_info_get_methods (PyGIBaseInfo *self)
1093 return _get_methods (self, GI_INFO_TYPE_OBJECT);
1097 _wrap_g_object_info_get_fields (PyGIBaseInfo *self)
1099 return _get_fields (self, GI_INFO_TYPE_OBJECT);
1103 _wrap_g_object_info_get_interfaces (PyGIBaseInfo *self)
1109 n_infos = g_object_info_get_n_interfaces ( (GIObjectInfo *) self->info);
1111 infos = PyTuple_New (n_infos);
1112 if (infos == NULL) {
1116 for (i = 0; i < n_infos; i++) {
1120 info = (GIBaseInfo *) g_object_info_get_interface ( (GIObjectInfo *) self->info, i);
1121 g_assert (info != NULL);
1123 py_info = _pygi_info_new (info);
1125 g_base_info_unref (info);
1127 if (py_info == NULL) {
1132 PyTuple_SET_ITEM (infos, i, py_info);
1139 _wrap_g_object_info_get_constants (PyGIBaseInfo *self)
1141 return _get_constants (self, GI_INFO_TYPE_OBJECT);
1145 _wrap_g_object_info_get_vfuncs (PyGIBaseInfo *self)
1147 return _get_vfuncs (self, GI_INFO_TYPE_OBJECT);
1151 _wrap_g_object_info_get_abstract (PyGIBaseInfo *self)
1153 gboolean is_abstract = g_object_info_get_abstract ( (GIObjectInfo*) self->info);
1154 return PyBool_FromLong (is_abstract);
1157 static PyMethodDef _PyGIObjectInfo_methods[] = {
1158 { "get_parent", (PyCFunction) _wrap_g_object_info_get_parent, METH_NOARGS },
1159 { "get_methods", (PyCFunction) _wrap_g_object_info_get_methods, METH_NOARGS },
1160 { "get_fields", (PyCFunction) _wrap_g_object_info_get_fields, METH_NOARGS },
1161 { "get_interfaces", (PyCFunction) _wrap_g_object_info_get_interfaces, METH_NOARGS },
1162 { "get_constants", (PyCFunction) _wrap_g_object_info_get_constants, METH_NOARGS },
1163 { "get_vfuncs", (PyCFunction) _wrap_g_object_info_get_vfuncs, METH_NOARGS },
1164 { "get_abstract", (PyCFunction) _wrap_g_object_info_get_abstract, METH_NOARGS },
1169 /* GIInterfaceInfo */
1170 PYGLIB_DEFINE_TYPE ("InterfaceInfo", PyGIInterfaceInfo_Type, PyGIBaseInfo);
1173 _wrap_g_interface_info_get_methods (PyGIBaseInfo *self)
1179 n_infos = g_interface_info_get_n_methods ( (GIInterfaceInfo *) self->info);
1181 infos = PyTuple_New (n_infos);
1182 if (infos == NULL) {
1186 for (i = 0; i < n_infos; i++) {
1190 info = (GIBaseInfo *) g_interface_info_get_method ( (GIInterfaceInfo *) self->info, i);
1191 g_assert (info != NULL);
1193 py_info = _pygi_info_new (info);
1195 g_base_info_unref (info);
1197 if (py_info == NULL) {
1202 PyTuple_SET_ITEM (infos, i, py_info);
1209 _wrap_g_interface_info_get_constants (PyGIBaseInfo *self)
1211 return _get_constants (self, GI_INFO_TYPE_INTERFACE);
1215 _wrap_g_interface_info_get_vfuncs (PyGIBaseInfo *self)
1217 return _get_vfuncs (self, GI_INFO_TYPE_INTERFACE);
1220 static PyMethodDef _PyGIInterfaceInfo_methods[] = {
1221 { "get_methods", (PyCFunction) _wrap_g_interface_info_get_methods, METH_NOARGS },
1222 { "get_constants", (PyCFunction) _wrap_g_interface_info_get_constants, METH_NOARGS },
1223 { "get_vfuncs", (PyCFunction) _wrap_g_interface_info_get_vfuncs, METH_NOARGS },
1227 /* GIConstantInfo */
1228 PYGLIB_DEFINE_TYPE ("gi.ConstantInfo", PyGIConstantInfo_Type, PyGIBaseInfo);
1231 _wrap_g_constant_info_get_value (PyGIBaseInfo *self)
1233 GITypeInfo *type_info;
1236 gboolean free_array = FALSE;
1238 if (g_constant_info_get_value ( (GIConstantInfo *) self->info, &value) < 0) {
1239 PyErr_SetString (PyExc_RuntimeError, "unable to get value");
1243 type_info = g_constant_info_get_type ( (GIConstantInfo *) self->info);
1245 if (g_type_info_get_tag (type_info) == GI_TYPE_TAG_ARRAY) {
1246 value.v_pointer = _pygi_argument_to_array (&value, NULL, NULL,
1247 type_info, &free_array);
1250 py_value = _pygi_argument_to_object (&value, type_info, GI_TRANSFER_NOTHING);
1253 g_array_free (value.v_pointer, FALSE);
1256 g_constant_info_free_value (self->info, &value);
1257 g_base_info_unref ( (GIBaseInfo *) type_info);
1262 static PyMethodDef _PyGIConstantInfo_methods[] = {
1263 { "get_value", (PyCFunction) _wrap_g_constant_info_get_value, METH_NOARGS },
1268 PYGLIB_DEFINE_TYPE ("gi.ValueInfo", PyGIValueInfo_Type, PyGIBaseInfo);
1271 _wrap_g_value_info_get_value (PyGIBaseInfo *self)
1275 value = g_value_info_get_value ( (GIValueInfo *) self->info);
1277 return PYGLIB_PyLong_FromLong (value);
1281 static PyMethodDef _PyGIValueInfo_methods[] = {
1282 { "get_value", (PyCFunction) _wrap_g_value_info_get_value, METH_NOARGS },
1288 PYGLIB_DEFINE_TYPE ("gi.FieldInfo", PyGIFieldInfo_Type, PyGIBaseInfo);
1291 _wrap_g_field_info_get_value (PyGIBaseInfo *self,
1295 GIBaseInfo *container_info;
1296 GIInfoType container_info_type;
1298 GITypeInfo *field_type_info;
1300 PyObject *py_value = NULL;
1301 gboolean free_array = FALSE;
1303 memset(&value, 0, sizeof(GIArgument));
1305 if (!PyArg_ParseTuple (args, "O:FieldInfo.get_value", &instance)) {
1309 container_info = g_base_info_get_container (self->info);
1310 g_assert (container_info != NULL);
1312 /* Check the instance. */
1313 if (!_pygi_g_registered_type_info_check_object ( (GIRegisteredTypeInfo *) container_info, TRUE, instance)) {
1314 _PyGI_ERROR_PREFIX ("argument 1: ");
1318 /* Get the pointer to the container. */
1319 container_info_type = g_base_info_get_type (container_info);
1320 switch (container_info_type) {
1321 case GI_INFO_TYPE_UNION:
1322 case GI_INFO_TYPE_STRUCT:
1323 pointer = pyg_boxed_get (instance, void);
1325 case GI_INFO_TYPE_OBJECT:
1326 pointer = pygobject_get (instance);
1329 /* Other types don't have fields. */
1330 g_assert_not_reached();
1333 /* Get the field's value. */
1334 field_type_info = g_field_info_get_type ( (GIFieldInfo *) self->info);
1336 /* A few types are not handled by g_field_info_get_field, so do it here. */
1337 if (!g_type_info_is_pointer (field_type_info)
1338 && g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_INTERFACE) {
1340 GIInfoType info_type;
1342 if (! (g_field_info_get_flags ( (GIFieldInfo *) self->info) & GI_FIELD_IS_READABLE)) {
1343 PyErr_SetString (PyExc_RuntimeError, "field is not readable");
1347 info = g_type_info_get_interface (field_type_info);
1349 info_type = g_base_info_get_type (info);
1351 g_base_info_unref (info);
1353 switch (info_type) {
1354 case GI_INFO_TYPE_UNION:
1355 PyErr_SetString (PyExc_NotImplementedError, "getting an union is not supported yet");
1357 case GI_INFO_TYPE_STRUCT:
1361 offset = g_field_info_get_offset ( (GIFieldInfo *) self->info);
1363 value.v_pointer = (char*) pointer + offset;
1365 goto argument_to_object;
1373 if (!g_field_info_get_field ( (GIFieldInfo *) self->info, pointer, &value)) {
1374 PyErr_SetString (PyExc_RuntimeError, "unable to get the value");
1378 if (g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_ARRAY) {
1379 value.v_pointer = _pygi_argument_to_array (&value, NULL, NULL,
1380 field_type_info, &free_array);
1384 py_value = _pygi_argument_to_object (&value, field_type_info, GI_TRANSFER_NOTHING);
1387 g_array_free (value.v_pointer, FALSE);
1391 g_base_info_unref ( (GIBaseInfo *) field_type_info);
1397 _wrap_g_field_info_set_value (PyGIBaseInfo *self,
1402 GIBaseInfo *container_info;
1403 GIInfoType container_info_type;
1405 GITypeInfo *field_type_info;
1407 PyObject *retval = NULL;
1409 if (!PyArg_ParseTuple (args, "OO:FieldInfo.set_value", &instance, &py_value)) {
1413 container_info = g_base_info_get_container (self->info);
1414 g_assert (container_info != NULL);
1416 /* Check the instance. */
1417 if (!_pygi_g_registered_type_info_check_object ( (GIRegisteredTypeInfo *) container_info, TRUE, instance)) {
1418 _PyGI_ERROR_PREFIX ("argument 1: ");
1422 /* Get the pointer to the container. */
1423 container_info_type = g_base_info_get_type (container_info);
1424 switch (container_info_type) {
1425 case GI_INFO_TYPE_UNION:
1426 case GI_INFO_TYPE_STRUCT:
1427 pointer = pyg_boxed_get (instance, void);
1429 case GI_INFO_TYPE_OBJECT:
1430 pointer = pygobject_get (instance);
1433 /* Other types don't have fields. */
1434 g_assert_not_reached();
1437 field_type_info = g_field_info_get_type ( (GIFieldInfo *) self->info);
1439 /* Check the value. */
1443 retval = _pygi_g_type_info_check_object (field_type_info, py_value, TRUE);
1449 _PyGI_ERROR_PREFIX ("argument 2: ");
1454 /* Set the field's value. */
1455 /* A few types are not handled by g_field_info_set_field, so do it here. */
1456 if (!g_type_info_is_pointer (field_type_info)
1457 && g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_INTERFACE) {
1459 GIInfoType info_type;
1461 if (! (g_field_info_get_flags ( (GIFieldInfo *) self->info) & GI_FIELD_IS_WRITABLE)) {
1462 PyErr_SetString (PyExc_RuntimeError, "field is not writable");
1466 info = g_type_info_get_interface (field_type_info);
1468 info_type = g_base_info_get_type (info);
1470 switch (info_type) {
1471 case GI_INFO_TYPE_UNION:
1472 PyErr_SetString (PyExc_NotImplementedError, "setting an union is not supported yet");
1474 case GI_INFO_TYPE_STRUCT:
1480 is_simple = pygi_g_struct_info_is_simple ( (GIStructInfo *) info);
1483 PyErr_SetString (PyExc_TypeError,
1484 "cannot set a structure which has no well-defined ownership transfer rules");
1485 g_base_info_unref (info);
1489 value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_NOTHING);
1490 if (PyErr_Occurred()) {
1491 g_base_info_unref (info);
1495 offset = g_field_info_get_offset ( (GIFieldInfo *) self->info);
1496 size = g_struct_info_get_size ( (GIStructInfo *) info);
1497 g_assert (size > 0);
1499 g_memmove ((char*) pointer + offset, value.v_pointer, size);
1501 g_base_info_unref (info);
1511 g_base_info_unref (info);
1512 } else if (g_type_info_is_pointer (field_type_info)
1513 && (g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_VOID
1514 || g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_UTF8)) {
1516 value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_NOTHING);
1517 if (PyErr_Occurred()) {
1521 int offset = g_field_info_get_offset ((GIFieldInfo *) self->info);
1522 G_STRUCT_MEMBER (gpointer, pointer, offset) = (gpointer)value.v_pointer;
1528 value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_EVERYTHING);
1529 if (PyErr_Occurred()) {
1533 if (!g_field_info_set_field ( (GIFieldInfo *) self->info, pointer, &value)) {
1534 _pygi_argument_release (&value, field_type_info, GI_TRANSFER_NOTHING, GI_DIRECTION_IN);
1535 PyErr_SetString (PyExc_RuntimeError, "unable to set value for field");
1542 g_base_info_unref ( (GIBaseInfo *) field_type_info);
1544 Py_XINCREF (retval);
1548 static PyMethodDef _PyGIFieldInfo_methods[] = {
1549 { "get_value", (PyCFunction) _wrap_g_field_info_get_value, METH_VARARGS },
1550 { "set_value", (PyCFunction) _wrap_g_field_info_set_value, METH_VARARGS },
1555 /* GIUnresolvedInfo */
1556 PYGLIB_DEFINE_TYPE ("gi.UnresolvedInfo", PyGIUnresolvedInfo_Type, PyGIBaseInfo);
1558 static PyMethodDef _PyGIUnresolvedInfo_methods[] = {
1563 PYGLIB_DEFINE_TYPE ("gi.VFuncInfo", PyGIVFuncInfo_Type, PyGIBaseInfo);
1566 _wrap_g_vfunc_info_get_invoker (PyGIBaseInfo *self)
1568 PyObject *result = Py_None;
1571 info = (GIBaseInfo *) g_vfunc_info_get_invoker ( (GIVFuncInfo *) self->info );
1573 result = _pygi_info_new(info);
1580 static PyMethodDef _PyGIVFuncInfo_methods[] = {
1581 { "get_invoker", (PyCFunction) _wrap_g_vfunc_info_get_invoker, METH_NOARGS },
1587 PYGLIB_DEFINE_TYPE ("gi.UnionInfo", PyGIUnionInfo_Type, PyGIBaseInfo);
1590 _wrap_g_union_info_get_fields (PyGIBaseInfo *self)
1596 n_infos = g_union_info_get_n_fields ( (GIUnionInfo *) self->info);
1598 infos = PyTuple_New (n_infos);
1599 if (infos == NULL) {
1603 for (i = 0; i < n_infos; i++) {
1607 info = (GIBaseInfo *) g_union_info_get_field ( (GIUnionInfo *) self->info, i);
1608 g_assert (info != NULL);
1610 py_info = _pygi_info_new (info);
1612 g_base_info_unref (info);
1614 if (py_info == NULL) {
1619 PyTuple_SET_ITEM (infos, i, py_info);
1626 _wrap_g_union_info_get_methods (PyGIBaseInfo *self)
1632 n_infos = g_union_info_get_n_methods ( (GIUnionInfo *) self->info);
1634 infos = PyTuple_New (n_infos);
1635 if (infos == NULL) {
1639 for (i = 0; i < n_infos; i++) {
1643 info = (GIBaseInfo *) g_union_info_get_method ( (GIUnionInfo *) self->info, i);
1644 g_assert (info != NULL);
1646 py_info = _pygi_info_new (info);
1648 g_base_info_unref (info);
1650 if (py_info == NULL) {
1655 PyTuple_SET_ITEM (infos, i, py_info);
1661 static PyMethodDef _PyGIUnionInfo_methods[] = {
1662 { "get_fields", (PyCFunction) _wrap_g_union_info_get_fields, METH_NOARGS },
1663 { "get_methods", (PyCFunction) _wrap_g_union_info_get_methods, METH_NOARGS },
1670 _pygi_g_base_info_get_fullname (GIBaseInfo *info)
1672 GIBaseInfo *container_info;
1675 container_info = g_base_info_get_container (info);
1676 if (container_info != NULL) {
1677 fullname = g_strdup_printf ("%s.%s.%s",
1678 g_base_info_get_namespace (container_info),
1679 g_base_info_get_name (container_info),
1680 g_base_info_get_name (info));
1682 fullname = g_strdup_printf ("%s.%s",
1683 g_base_info_get_namespace (info),
1684 g_base_info_get_name (info));
1687 if (fullname == NULL) {
1695 _pygi_info_register_types (PyObject *m)
1697 #define _PyGI_REGISTER_TYPE(m, type, cname, base) \
1698 Py_TYPE(&type) = &PyType_Type; \
1699 type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE); \
1700 type.tp_weaklistoffset = offsetof(PyGIBaseInfo, inst_weakreflist); \
1701 type.tp_methods = _PyGI##cname##_methods; \
1702 type.tp_base = &base; \
1703 if (PyType_Ready(&type)) \
1705 if (PyModule_AddObject(m, #cname, (PyObject *)&type)) \
1708 Py_TYPE(&PyGIBaseInfo_Type) = &PyType_Type;
1710 PyGIBaseInfo_Type.tp_dealloc = (destructor) _base_info_dealloc;
1711 PyGIBaseInfo_Type.tp_repr = (reprfunc) _base_info_repr;
1712 PyGIBaseInfo_Type.tp_flags = (Py_TPFLAGS_DEFAULT |
1713 Py_TPFLAGS_BASETYPE |
1714 Py_TPFLAGS_HAVE_GC);
1715 PyGIBaseInfo_Type.tp_traverse = (traverseproc) _base_info_traverse;
1716 PyGIBaseInfo_Type.tp_weaklistoffset = offsetof(PyGIBaseInfo, inst_weakreflist);
1717 PyGIBaseInfo_Type.tp_methods = _PyGIBaseInfo_methods;
1718 PyGIBaseInfo_Type.tp_richcompare = (richcmpfunc)_base_info_richcompare;
1720 if (PyType_Ready(&PyGIBaseInfo_Type))
1723 if (PyModule_AddObject(m, "BaseInfo", (PyObject *)&PyGIBaseInfo_Type))
1726 if (PyModule_AddObject(m, "DIRECTION_IN", PyLong_FromLong(GI_DIRECTION_IN)))
1728 if (PyModule_AddObject(m, "DIRECTION_OUT", PyLong_FromLong(GI_DIRECTION_OUT)))
1730 if (PyModule_AddObject(m, "DIRECTION_INOUT", PyLong_FromLong(GI_DIRECTION_INOUT)))
1733 _PyGI_REGISTER_TYPE (m, PyGIUnresolvedInfo_Type, UnresolvedInfo,
1735 _PyGI_REGISTER_TYPE (m, PyGICallableInfo_Type, CallableInfo,
1737 _PyGI_REGISTER_TYPE (m, PyGICallbackInfo_Type, CallbackInfo,
1739 _PyGI_REGISTER_TYPE (m, PyGIFunctionInfo_Type, FunctionInfo,
1740 PyGICallableInfo_Type);
1741 _PyGI_REGISTER_TYPE (m, PyGIRegisteredTypeInfo_Type, RegisteredTypeInfo,
1743 _PyGI_REGISTER_TYPE (m, PyGIStructInfo_Type, StructInfo,
1744 PyGIRegisteredTypeInfo_Type);
1745 _PyGI_REGISTER_TYPE (m, PyGIEnumInfo_Type, EnumInfo,
1746 PyGIRegisteredTypeInfo_Type);
1747 _PyGI_REGISTER_TYPE (m, PyGIObjectInfo_Type, ObjectInfo,
1748 PyGIRegisteredTypeInfo_Type);
1749 _PyGI_REGISTER_TYPE (m, PyGIInterfaceInfo_Type, InterfaceInfo,
1750 PyGIRegisteredTypeInfo_Type);
1751 _PyGI_REGISTER_TYPE (m, PyGIConstantInfo_Type, ConstantInfo,
1753 _PyGI_REGISTER_TYPE (m, PyGIValueInfo_Type, ValueInfo,
1755 _PyGI_REGISTER_TYPE (m, PyGIFieldInfo_Type, FieldInfo,
1757 _PyGI_REGISTER_TYPE (m, PyGIVFuncInfo_Type, VFuncInfo,
1758 PyGICallableInfo_Type);
1759 _PyGI_REGISTER_TYPE (m, PyGIUnionInfo_Type, UnionInfo,
1760 PyGIRegisteredTypeInfo_Type);
1761 _PyGI_REGISTER_TYPE (m, PyGIBoxedInfo_Type, BoxedInfo,
1763 _PyGI_REGISTER_TYPE (m, PyGIErrorDomainInfo_Type, ErrorDomainInfo,
1765 _PyGI_REGISTER_TYPE (m, PyGISignalInfo_Type, SignalInfo,
1767 _PyGI_REGISTER_TYPE (m, PyGIPropertyInfo_Type, PropertyInfo,
1769 _PyGI_REGISTER_TYPE (m, PyGIArgInfo_Type, ArgInfo,
1771 _PyGI_REGISTER_TYPE (m, PyGITypeInfo_Type, TypeInfo,
1775 #undef _PyGI_REGISTER_TYPE