]> granicus.if.org Git - python/commitdiff
_PyEval_SliceIndex(): Repaired the comments, and added XXX comments
authorTim Peters <tim.peters@gmail.com>
Sun, 16 Dec 2001 19:11:44 +0000 (19:11 +0000)
committerTim Peters <tim.peters@gmail.com>
Sun, 16 Dec 2001 19:11:44 +0000 (19:11 +0000)
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).

Python/ceval.c

index 3e41b9a148d795b8f90cde00a1247dabdcdd981e..f99e44a9aef5774afd0a44fa3f3731a751811825 100644 (file)
@@ -3328,14 +3328,18 @@ loop_subscript(PyObject *v, PyObject *w)
        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 @@ _PyEval_SliceIndex(PyObject *v, int *pi)
 
                                /* 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,