PEP 3123: Provide forward compatibility with Python 3.0, while keeping
backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
PyVarObject_HEAD_INIT.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index dd9887b..fbf6a12 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -151,12 +151,12 @@
}
static PyTypeObject PdataType = {
- PyObject_HEAD_INIT(NULL) 0, "cPickle.Pdata", sizeof(Pdata), 0,
+ PyVarObject_HEAD_INIT(NULL, 0) "cPickle.Pdata", sizeof(Pdata), 0,
(destructor)Pdata_dealloc,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0L,0L,0L,0L, ""
};
-#define Pdata_Check(O) ((O)->ob_type == &PdataType)
+#define Pdata_Check(O) (Py_Type(O) == &PdataType)
static PyObject *
Pdata_New(void)
@@ -316,7 +316,7 @@
}
#define FREE_ARG_TUP(self) { \
- if (self->arg->ob_refcnt > 1) { \
+ if (Py_Refcnt(self->arg) > 1) { \
Py_DECREF(self->arg); \
self->arg=NULL; \
} \
@@ -752,7 +752,7 @@
static int
put(Picklerobject *self, PyObject *ob)
{
- if (ob->ob_refcnt < 2 || self->fast)
+ if (Py_Refcnt(ob) < 2 || self->fast)
return 0;
return put2(self, ob);
@@ -916,7 +916,7 @@
PyErr_Format(PyExc_ValueError,
"fast mode: can't pickle cyclic objects "
"including object type %s at %p",
- obj->ob_type->tp_name, obj);
+ Py_Type(obj)->tp_name, obj);
self->fast_container = -1;
return 0;
}
@@ -2320,7 +2320,7 @@
goto finally;
}
- type = args->ob_type;
+ type = Py_Type(args);
switch (type->tp_name[0]) {
case 'b':
@@ -2372,7 +2372,7 @@
#endif
}
- if (args->ob_refcnt > 1) {
+ if (Py_Refcnt(args) > 1) {
if (!( py_ob_id = PyLong_FromVoidPtr(args)))
goto finally;
@@ -2913,7 +2913,7 @@
Py_XDECREF(self->inst_pers_func);
Py_XDECREF(self->dispatch_table);
PyMem_Free(self->write_buf);
- self->ob_type->tp_free((PyObject *)self);
+ Py_Type(self)->tp_free((PyObject *)self);
}
static int
@@ -3037,8 +3037,7 @@
"Objects that know how to pickle objects\n");
static PyTypeObject Picklertype = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"cPickle.Pickler", /*tp_name*/
sizeof(Picklerobject), /*tp_basicsize*/
0,
@@ -5254,7 +5253,7 @@
free(self->buf);
}
- self->ob_type->tp_free((PyObject *)self);
+ Py_Type(self)->tp_free((PyObject *)self);
}
static int
@@ -5483,8 +5482,7 @@
"Objects that know how to unpickle");
static PyTypeObject Unpicklertype = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"cPickle.Unpickler", /*tp_name*/
sizeof(Unpicklerobject), /*tp_basicsize*/
0,
@@ -5708,9 +5706,9 @@
PyObject *format_version;
PyObject *compatible_formats;
- Picklertype.ob_type = &PyType_Type;
- Unpicklertype.ob_type = &PyType_Type;
- PdataType.ob_type = &PyType_Type;
+ Py_Type(&Picklertype) = &PyType_Type;
+ Py_Type(&Unpicklertype) = &PyType_Type;
+ Py_Type(&PdataType) = &PyType_Type;
/* Initialize some pieces. We need to do this before module creation,
* so we're forced to use a temporary dictionary. :(