Issue 908441: default index for getslice is not sys.maxint (original) (raw)
(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]