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. :(