Hi Guido, On Fri, Jul 28, 2006 at 11:31:09AM -0700, Guido van Rossum wrote: > No time to look through the code here, but IMO it's acceptable (at > least for 2.5) if (2**100).__index__() raises OverflowError, as long > as x[:2**100] silently clips. __index__() is primarily meant to return > a value useful for indexing concrete sequences, and 2**100 isn't.
If nb_index keeps returning a Py_ssize_t with clipping, it means that there is no way to write in pure Python an object that emulates a long -- only an int. Sounds inconsistent with the int/long unification trend for pure Python code. It would make it awkward to write, say, pure Python classes that pretend to be very large sequences, because using __index__ in such code wouldn't work. Another example of this is that if places like sequence_repeat are made to use the following pseudo-logic: if isinstance(w, long) and w > sys.maxint: raise OverflowError else: i = w.__index__() then if an object 'l' is an emulated pseudo-long, then "x"*l will still silently clip the pseudo-long to sys.maxint. I'm more in favor of changing nb_index to return a PyObject *, since now is our last chance to do so. A pair of API functions can be added to return a Py_ssize_t with either the proper clipping, or the proper OverflowError'ing. A bientot, Armin. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com