[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;