[pygobject/gsoc2009: 120/160] Allow None for struct and object arguments



commit e79e60d600f3012082e135b1deee6f042fab1729
Author: Simon van der Linden <svdlinden src gnome org>
Date:   Thu Aug 6 15:29:42 2009 +0200

    Allow None for struct and object arguments

 gi/pygi-argument.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 4b16c67..8dd1de4 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -364,7 +364,7 @@ check_number_release:
         }
         case GI_TYPE_TAG_UTF8:
         case GI_TYPE_TAG_FILENAME:
-            if (!PyString_Check(object) && (object != Py_None || may_be_null)) {
+            if (!PyString_Check(object) && (!may_be_null || object != Py_None)) {
                 PyErr_Format(PyExc_TypeError, "Must be string, not %s",
                         object->ob_type->tp_name);
                 retval = 0;
@@ -470,6 +470,9 @@ check_number_release:
                 }
                 case GI_INFO_TYPE_BOXED:
                 case GI_INFO_TYPE_OBJECT:
+                    if (may_be_null && object == Py_None) {
+                        break;
+                    }
                     retval = _pygi_g_registered_type_info_check_object((GIRegisteredTypeInfo *)info, TRUE, object);
                     break;
                 default:
@@ -944,12 +947,22 @@ array_item_error:
                         break;
                     }
 
+                    if (object == Py_None) {
+                        arg.v_pointer = NULL;
+                        break;
+                    }
+
                     buffer = _pygi_object_get_buffer(object, &size);
 
                     arg.v_pointer = buffer;
                     break;
                 }
                 case GI_INFO_TYPE_OBJECT:
+                    if (object == Py_None) {
+                        arg.v_pointer = NULL;
+                        break;
+                    }
+
                     arg.v_pointer = pygobject_get(object);
                     if (transfer == GI_TRANSFER_EVERYTHING) {
                         g_object_ref(arg.v_pointer);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]