[Python-Dev] Re: [snake-farm] test test_slice failed -- [9, 7, 5, 3, 1] == [0]

Neal Norwitz neal@metaslash.com
Wed, 06 Nov 2002 08:32:45 -0500


On Wed, Nov 06, 2002 at 11:04:57AM +0000, Michael Hudson wrote:
> 
> So you suggest changing PySlice_GetIndicesEx(), right?

Yes.  But based on Guido's comments and some thinking,
I don't think the API should change to longs.  Your
solution below make sense, but didn't work.

> I think the better idea is to call _PyEval_SliceIndex for the step
> element of the slice too.  And maybe change the latter from
> 
>                 else if (x < -INT_MAX)
>                         x = 0;
> 
> to
> 
>                 else if (x < -INT_MAX)
>                         x = -INT_MAX;
> 
> Can you test this on a 64 bit platform or shall I just check it in?

Tested on SF compile farm (ssh to compile.sf.net), they have a very
fast Alpha.

Here's the trimmed down diff:

        Index: Python/ceval.c (in _PyEval_SliceIndex)
        @@ -3507,7 +3507,7 @@
                        else if (x < -INT_MAX)
        -                       x = 0;
        +                       x = -INT_MAX;
                        *pi = x;

        Index: Objects/sliceobject.c
        @@ -119,7 +119,7 @@
                if (r->step == Py_None) {
                        *step = 1;
                } else {
        -               *step = PyInt_AsLong(r->step);
        +               if (!_PyEval_SliceIndex(r->step, step)) return -1;
                        if (*step == -1 && PyErr_Occurred()) {
                                return -1;

But this didn't produce the correct results:

        >>> range(10)[::sys.maxint-1]
        []

Neal