PRIVATE_SYMBOLS;
+/*----- Python version compatibility hacks --------------------------------*/
+
+/* The handy `Py_TYPE' and `Py_SIZE' macros turned up in 2.6. Define them if
+ * they're not already here.
+ */
+#ifndef Py_TYPE
+# define Py_TYPE(obj) (((PyObject *)(obj))->ob_type)
+#endif
+#ifndef Py_SIZE
+# define Py_SIZE(obj) (((PyVarObject *)(obj))->ob_size)
+#endif
+
/*----- Utilities for returning values and exceptions ---------------------*/
/* Returning values. */
/*----- Miscellaneous utilities -------------------------------------------*/
-#define FREEOBJ(obj) \
- (((PyObject *)(obj))->ob_type->tp_free((PyObject *)(obj)))
+#define FREEOBJ(obj) (Py_TYPE(obj)->tp_free((PyObject *)(obj)))
/* Actually free OBJ, e.g., in a deallocation function. */
extern PyObject *abstract_pynew(PyTypeObject *, PyObject *, PyObject *);