extern DL_IMPORT(PyTypeObject) PyComplex_Type;
-#define PyComplex_Check(op) ((op)->ob_type == &PyComplex_Type)
+#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
extern DL_IMPORT(PyObject *) PyComplex_FromCComplex(Py_complex);
extern DL_IMPORT(PyObject *) PyComplex_FromDoubles(double real, double imag);
extern DL_IMPORT(PyTypeObject) PyFloat_Type;
-#define PyFloat_Check(op) ((op)->ob_type == &PyFloat_Type)
+#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
/* Return Python float from string PyObject. Second argument ignored on
input, and, if non-NULL, NULL is stored into *junk (this tried to serve a
extern DL_IMPORT(PyTypeObject) PyInt_Type;
-#define PyInt_Check(op) ((op)->ob_type == &PyInt_Type)
+#define PyInt_Check(op) PyObject_TypeCheck(op, &PyInt_Type)
extern DL_IMPORT(PyObject *) PyInt_FromString(char*, char**, int);
#ifdef Py_USING_UNICODE
extern DL_IMPORT(PyTypeObject) PyLong_Type;
-#define PyLong_Check(op) ((op)->ob_type == &PyLong_Type)
+#define PyLong_Check(op) PyObject_TypeCheck(op, &PyLong_Type)
extern DL_IMPORT(PyObject *) PyLong_FromLong(long);
extern DL_IMPORT(PyObject *) PyLong_FromUnsignedLong(unsigned long);