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]