[pygobject] Use accessors for getting and setting PyGPointer fields
- From: Simon Feltman <sfeltman src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Use accessors for getting and setting PyGPointer fields
- Date: Fri, 16 May 2014 21:57:08 +0000 (UTC)
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]