[Python-Dev] Py_CLEAR and assigning values
Paul Pogonyshev
pogonyshev at gmx.net
Tue Aug 5 22:38:21 CEST 2008
Hi,
Sorry if this topic was discussed before, but I couldn't find.
Py_CLEAR documentation explains why it is better than Py_DECREF and
NULL assignment. However, I don't understand why there is no similar
macro for the case you want to replace one object with another?
I.e. 'naive' way:
Py_DECREF (self->x);
/* This is prone to the same bug Py_CLEAR prevents. */
self->x = y;
Py_INCREF (self->x);
Py_CLEAR way:
Py_CLEAR (self->x);
/* But __del__ can now in principle trigger access to NULL. */
self->x = y;
Py_INCREF (self->x);
Way I'd think would be possible:
Py_ASSIGN (self->x, y)
where Py_ASSIGN is defined this way:
#define Py_ASSIGN(op, val) \
do { \
PyObject *_py_tmp = (PyObject *)(op); \
(op) = val; \
Py_XINCREF(op); \
Py_XDECREF(_py_tmp); \
} while (0)
Do I miss something obvious? Or is there already a standard way to
do that which I overlooked?
Paul
More information about the Python-Dev
mailing list