Make the PyXXX_Check() macros for the numeric types inheritance-aware.
diff --git a/Include/complexobject.h b/Include/complexobject.h
index ef5016f..edd2069 100644
--- a/Include/complexobject.h
+++ b/Include/complexobject.h
@@ -42,7 +42,7 @@
 
 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);
diff --git a/Include/floatobject.h b/Include/floatobject.h
index 6e36a2f..9f67bc1 100644
--- a/Include/floatobject.h
+++ b/Include/floatobject.h
@@ -18,7 +18,7 @@
 
 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
diff --git a/Include/intobject.h b/Include/intobject.h
index 128d0d3..29448e3 100644
--- a/Include/intobject.h
+++ b/Include/intobject.h
@@ -27,7 +27,7 @@
 
 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
diff --git a/Include/longobject.h b/Include/longobject.h
index 8efa35f..5d1ea0a 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -11,7 +11,7 @@
 
 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);