diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-11-22 17:56:20 +0100 |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-11-22 17:56:38 +0100 |
commit | fad89e12a744b57e6348968f351d25d167de8248 (patch) | |
tree | 05727f1893b806d6daaf260391608c75638587f9 /gi | |
parent | 1dc62a998dd8d2a0a397f8309011a8d79cb56034 (diff) | |
download | pygi-fad89e12a744b57e6348968f351d25d167de8248.tar.gz pygi-fad89e12a744b57e6348968f351d25d167de8248.tar.xz pygi-fad89e12a744b57e6348968f351d25d167de8248.zip |
Add support for Any arguments
https://bugzilla.gnome.org/show_bug.cgi?id=601253
Diffstat (limited to 'gi')
-rw-r--r-- | gi/pygi-argument.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c index deaa72a..3a9e207 100644 --- a/gi/pygi-argument.c +++ b/gi/pygi-argument.c @@ -197,11 +197,7 @@ _pygi_g_type_info_check_object (GITypeInfo *type_info, switch (type_tag) { case GI_TYPE_TAG_VOID: - if (object != Py_None) { - PyErr_Format(PyExc_TypeError, "Must be %s, not %s", - Py_None->ob_type->tp_name, object->ob_type->tp_name); - retval = 0; - } + /* No check; VOID means undefined type */ break; case GI_TYPE_TAG_BOOLEAN: /* No check; every Python object has a truth value. */ @@ -624,7 +620,8 @@ _pygi_argument_from_object (PyObject *object, switch (type_tag) { case GI_TYPE_TAG_VOID: - arg.v_pointer = NULL; + g_warn_if_fail(transfer == GI_TRANSFER_NOTHING); + arg.v_pointer = object; break; case GI_TYPE_TAG_BOOLEAN: { @@ -1274,8 +1271,13 @@ _pygi_argument_to_object (GArgument *arg, switch (type_tag) { case GI_TYPE_TAG_VOID: - Py_INCREF(Py_None); - object = Py_None; + if (is_pointer) { + /* Raw Python objects are passed to void* args */ + g_warn_if_fail(transfer == GI_TRANSFER_NOTHING); + object = arg->v_pointer; + } else + object = Py_None; + Py_INCREF(object); break; case GI_TYPE_TAG_BOOLEAN: { @@ -1711,6 +1713,8 @@ _pygi_argument_release (GArgument *arg, switch(type_tag) { case GI_TYPE_TAG_VOID: + /* Don't do anything, it's transparent to the C side */ + break; case GI_TYPE_TAG_BOOLEAN: case GI_TYPE_TAG_INT8: case GI_TYPE_TAG_UINT8: |