diff Python/ceval.c @ 21440:30efe46f8e3c legacy-trunk

_PyEval_SliceIndex(): Repaired the comments, and added XXX comments about its dubious treatment of NULL (also opened a bug report on that, but don't want to risk changing it this late in the 2.2 game).
author Tim Peters <tim.peters@gmail.com>
date Sun, 16 Dec 2001 19:11:44 +0000
parents de125792bfaa
children 05ad7a69d933
line wrap: on
line diff
--- a/Python/ceval.c	Sun Dec 16 01:54:55 2001 +0000
+++ b/Python/ceval.c	Sun Dec 16 19:11:44 2001 +0000
@@ -3328,14 +3328,18 @@
 	return NULL;
 }
 
-/* Extract a slice index from a PyInt or PyLong, the index is bound to
-   the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
-   and error. Returns 1 on success.*/
-
+/* Extract a slice index from a PyInt or PyLong, and store in *pi.
+   Silently reduce values larger than INT_MAX to INT_MAX, and silently
+   boost values less than -INT_MAX to 0.  Return 0 on error, 1 on success.
+*/
+/* XXX If v is NULL, this goes out of its way to indicate success(!), but
+   XXX doesn't store into *pi.  Why isn't that an error, or at least v!=NULL
+   XXX an asserted precondition?
+*/
 int
 _PyEval_SliceIndex(PyObject *v, int *pi)
 {
-	if (v != NULL) {
+	if (v != NULL) {  /* XXX why isn't this assert(v != NULL()? */
 		long x;
 		if (PyInt_Check(v)) {
 			x = PyInt_AsLong(v);
@@ -3362,7 +3366,8 @@
 
 				/* Create a long integer with a value of 0 */
 				long_zero = PyLong_FromLong(0L);
-				if (long_zero == NULL) return 0;
+				if (long_zero == NULL)
+					return 0;
 
 				/* Check sign */
 				cmp = PyObject_RichCompareBool(v, long_zero,