[Python-Dev] Re: [snake-farm] test test_slice failed -- [9, 7, 5, 3, 1] == [0]
Michael Hudson
mwh@python.net
06 Nov 2002 13:56:54 +0000
Neal Norwitz <neal@metaslash.com> writes:
> 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.
Nuts.
> > 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]
> []
Wierd. Shall dig.
Nice how you get warnings from the system header files on that alpha
isn't it?
...
Works for me!
mwh@usf-cf-alpha-linux-1:~/python$ ./python
Python 2.3a0 (#2, Nov 6 2002, 05:44:13)
[GCC 2.95.4 20011002 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> range(10)[::sys.maxint - 2]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'sys' is not defined
>>> import sys
>>> range(10)[::sys.maxint - 2]
[0]
>>>
Try again? Can you try playing with gdb to see what's going on?
Cheers,
M.
--
-Dr. Olin Shivers,
Ph.D., Cranberry-Melon School of Cucumber Science
-- seen in comp.lang.scheme