[pygobject] Use accessors for getting and setting PyGPointer fields



commit b49179ba3b39576c0c8fe8586b7091dbbaef8046
Author: Simon Feltman <sfeltman src gnome org>
Date:   Fri May 16 14:50:57 2014 -0700

    Use accessors for getting and setting PyGPointer fields
    
    Add pyg_pointer_get_ptr and pyg_pointer_set_ptr macros for getting and
    setting the pointer field. This is preliminary cleanup work for supporting
    fundamental types.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=631901

 gi/gimodule.c    |    2 +-
 gi/pygi-struct.c |    6 +++---
 gi/pygobject.h   |    2 ++
 gi/pygpointer.c  |   14 +++++++-------
 4 files changed, 13 insertions(+), 11 deletions(-)
---
diff --git a/gi/gimodule.c b/gi/gimodule.c
index a1779d3..44a8fbd 100644
--- a/gi/gimodule.c
+++ b/gi/gimodule.c
@@ -496,7 +496,7 @@ _wrap_pyg_variant_new_tuple (PyObject *self, PyObject *args)
             return NULL;
         }
 
-        values[i] = (GVariant *) ( (PyGPointer *) value)->pointer;
+        values[i] = pyg_pointer_get (value, GVariant);
     }
 
     variant = g_variant_new_tuple (values, PyTuple_Size (py_values));
diff --git a/gi/pygi-struct.c b/gi/pygi-struct.c
index b1db8a4..692068b 100644
--- a/gi/pygi-struct.c
+++ b/gi/pygi-struct.c
@@ -60,9 +60,9 @@ _struct_dealloc (PyGIStruct *self)
     GIBaseInfo *info = _struct_get_info ( (PyObject *) self );
 
     if (info != NULL && g_struct_info_is_foreign ( (GIStructInfo *) info)) {
-        pygi_struct_foreign_release (info, ( (PyGPointer *) self)->pointer);
+        pygi_struct_foreign_release (info, pyg_pointer_get_ptr (self));
     } else if (self->free_on_dealloc) {
-        g_free ( ( (PyGPointer *) self)->pointer);
+        g_free (pyg_pointer_get_ptr (self));
     }
 
     if (info != NULL) {
@@ -152,8 +152,8 @@ _pygi_struct_new (PyTypeObject *type,
 
     g_type = pyg_type_from_object ( (PyObject *) type);
 
+    pyg_pointer_set_ptr (self, pointer);
     ( (PyGPointer *) self)->gtype = g_type;
-    ( (PyGPointer *) self)->pointer = pointer;
     self->free_on_dealloc = free_on_dealloc;
 
     return (PyObject *) self;
diff --git a/gi/pygobject.h b/gi/pygobject.h
index 1bb87a7..c51bfdd 100644
--- a/gi/pygobject.h
+++ b/gi/pygobject.h
@@ -68,6 +68,8 @@ typedef struct {
 } PyGPointer;
 
 #define pyg_pointer_get(v,t)      ((t *)((PyGPointer *)(v))->pointer)
+#define pyg_pointer_get_ptr(v)    (((PyGPointer *)(v))->pointer)
+#define pyg_pointer_set_ptr(v,p)  (((PyGPointer *)(v))->pointer = (gpointer)p)
 #define pyg_pointer_check(v,typecode) (PyObject_TypeCheck(v, &PyGPointer_Type) && ((PyGPointer *)(v))->gtype 
== typecode)
 
 typedef void (*PyGFatalExceptionFunc) (void);
diff --git a/gi/pygpointer.c b/gi/pygpointer.c
index 7e39429..d728a40 100644
--- a/gi/pygpointer.c
+++ b/gi/pygpointer.c
@@ -44,9 +44,9 @@ static PyObject*
 pyg_pointer_richcompare(PyObject *self, PyObject *other, int op)
 {
     if (Py_TYPE(self) == Py_TYPE(other))
-        return _pyglib_generic_ptr_richcompare(((PyGPointer*)self)->pointer,
-                                               ((PyGPointer*)other)->pointer,
-                                               op);
+        return _pyglib_generic_ptr_richcompare (pyg_pointer_get_ptr (self),
+                                                pyg_pointer_get_ptr (other),
+                                                op);
     else {
         Py_INCREF(Py_NotImplemented);
         return Py_NotImplemented;
@@ -56,7 +56,7 @@ pyg_pointer_richcompare(PyObject *self, PyObject *other, int op)
 static long
 pyg_pointer_hash(PyGPointer *self)
 {
-    return (long)self->pointer;
+    return (long)pyg_pointer_get_ptr (self);
 }
 
 static PyObject *
@@ -65,7 +65,7 @@ pyg_pointer_repr(PyGPointer *self)
     gchar buf[128];
 
     g_snprintf(buf, sizeof(buf), "<%s at 0x%lx>", g_type_name(self->gtype),
-              (long)self->pointer);
+              (long)pyg_pointer_get_ptr (self));
     return PYGLIB_PyUnicode_FromString(buf);
 }
 
@@ -77,7 +77,7 @@ pyg_pointer_init(PyGPointer *self, PyObject *args, PyObject *kwargs)
     if (!PyArg_ParseTuple(args, ":GPointer.__init__"))
        return -1;
 
-    self->pointer = NULL;
+    pyg_pointer_set_ptr (self, NULL);
     self->gtype = 0;
 
     g_snprintf(buf, sizeof(buf), "%s can not be constructed",
@@ -175,7 +175,7 @@ pyg_pointer_new(GType pointer_type, gpointer pointer)
     if (self == NULL)
        return NULL;
 
-    self->pointer = pointer;
+    pyg_pointer_set_ptr (self, pointer);
     self->gtype = pointer_type;
 
     return (PyObject *)self;


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