[Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.182,2.183
Neil Schemenauer
python-dev@python.org
Mon, 4 Dec 2000 07:42:14 -0800
Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv17504/Python
Modified Files:
bltinmodule.c
Log Message:
Make isinstance() more permissive in what types of arguments it
accepts. Clarify exception messages for isinstance() and
issubclass().
Index: bltinmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v
retrieving revision 2.182
retrieving revision 2.183
diff -C2 -r2.182 -r2.183
*** bltinmodule.c 2000/10/24 19:57:45 2.182
--- bltinmodule.c 2000/12/04 15:42:11 2.183
***************
*** 1996,2000 ****
static int
! abstract_issubclass(PyObject *derived, PyObject *cls, char *err, int first)
{
static PyObject *__bases__ = NULL;
--- 1996,2000 ----
static int
! abstract_issubclass(PyObject *derived, PyObject *cls, int first)
{
static PyObject *__bases__ = NULL;
***************
*** 2013,2017 ****
if (bases == NULL || !PyTuple_Check(bases)) {
Py_XDECREF(bases);
! PyErr_SetString(PyExc_TypeError, err);
return -1;
}
--- 2013,2018 ----
if (bases == NULL || !PyTuple_Check(bases)) {
Py_XDECREF(bases);
! PyErr_SetString(PyExc_TypeError,
! "arg 2 must be a class or type");
return -1;
}
***************
*** 2025,2029 ****
if (bases == NULL || !PyTuple_Check(bases)) {
Py_XDECREF(bases);
! PyErr_SetString(PyExc_TypeError, err);
return -1;
}
--- 2026,2031 ----
if (bases == NULL || !PyTuple_Check(bases)) {
Py_XDECREF(bases);
! PyErr_SetString(PyExc_TypeError,
! "arg 2 must be a class or type");
return -1;
}
***************
*** 2031,2036 ****
n = PyTuple_GET_SIZE(bases);
for (i = 0; i < n; i++) {
! r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
! cls, err, 0);
if (r != 0)
break;
--- 2033,2037 ----
n = PyTuple_GET_SIZE(bases);
for (i = 0; i < n; i++) {
! r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls, 0);
if (r != 0)
break;
***************
*** 2072,2079 ****
icls = PyObject_GetAttr(inst, __class__);
if (icls != NULL) {
! retval = abstract_issubclass(
! icls, cls,
! "isinstance() arg 2 must be a class",
! 1);
Py_DECREF(icls);
if (retval < 0)
--- 2073,2077 ----
icls = PyObject_GetAttr(inst, __class__);
if (icls != NULL) {
! retval = abstract_issubclass( icls, cls, 1);
Py_DECREF(icls);
if (retval < 0)
***************
*** 2082,2094 ****
else {
PyErr_SetString(PyExc_TypeError,
! "isinstance() arg 2 must be a class");
return NULL;
}
}
- else {
- PyErr_SetString(PyExc_TypeError,
- "isinstance() arg 2 must be a class");
- return NULL;
- }
return PyInt_FromLong(retval);
}
--- 2080,2087 ----
else {
PyErr_SetString(PyExc_TypeError,
! "arg 2 must be a class or type");
return NULL;
}
}
return PyInt_FromLong(retval);
}
***************
*** 2112,2117 ****
if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
! retval = abstract_issubclass(
! derived, cls, "arguments must be classes", 1);
if (retval < 0)
return NULL;
--- 2105,2109 ----
if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
! retval = abstract_issubclass(derived, cls, 1);
if (retval < 0)
return NULL;