Message60473
(This applies also to __setslice__ and possibly more.)
(This was already present in Python-2.2.)
If the upper slice index is omitted, a default is
passed to the __getslice__ method.
Documentation claims this is sys.maxint.
This is wrong if INT_MAX and LONG_MAX differ; what
is passed is INT_MAX while sys.maxint is LONG_MAX.
I'm not sure whether to call it a code bug or a
documentation bug; at least there is code out there
which compares to sys.maxint.
The whole code path from ceval.c:_PyEval_SliceIndex()
to operator.c:op_getslice() to
abstract.c:PySequence_GetSlice() to
classobject.c:instance_slice() has just room for
an "int", so a code fix is pretty invasive...
A small test program to check this:
==========
import sys
class sl(object):
def __getslice__(self, a, b):
return (a, b)
print "sys.maxint = %ld" % sys.maxint
bounds = sl()[:]
print "default bounds = [%ld, %ld]" % bounds
==========
gives on NetBSD/amd64:
sys.maxint = 9223372036854775807
default bounds = [0, 2147483647]
|
|
Date |
User |
Action |
Args |
2008-01-20 09:56:48 | admin | link | issue908441 messages |
2008-01-20 09:56:48 | admin | create | |
|