[Python-checkins] CVS: python/dist/src/Objects longobject.c,1.83,1.84

Guido van Rossum gvanrossum@users.sourceforge.net
Thu, 12 Jul 2001 04:21:19 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv4886

Modified Files:
	longobject.c 
Log Message:
On long to the negative long power, let float handle it instead of
raising an error.  This was one of the two issues that the VPython
folks were particularly problematic for their students.  (The other
one was integer division...)  This implements (my) SF patch #440487.


Index: longobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -C2 -r1.83 -r1.84
*** longobject.c	2001/06/16 08:48:40	1.83
--- longobject.c	2001/07/12 11:21:17	1.84
***************
*** 1544,1555 ****
  	size_b = b->ob_size;
  	if (size_b < 0) {
! 		if (a->ob_size)
! 			PyErr_SetString(PyExc_ValueError,
! 					"long integer to a negative power");
! 		else
! 			PyErr_SetString(PyExc_ZeroDivisionError,
! 					"zero to a negative power");
! 		z = NULL;
! 		goto error;
  	}
  	z = (PyLongObject *)PyLong_FromLong(1L);
--- 1544,1554 ----
  	size_b = b->ob_size;
  	if (size_b < 0) {
! 		/* Return a float.  This works because we know that
! 		   this calls float_pow() which converts its
! 		   arguments to double. */
! 		Py_DECREF(a);
! 		Py_DECREF(b);
! 		Py_DECREF(c);
! 		return PyFloat_Type.tp_as_number->nb_power(v, w, x);
  	}
  	z = (PyLongObject *)PyLong_FromLong(1L);