Author: Hakan Ardo <ha...@debian.org> Branch: Changeset: r48768:21cb735ed98a Date: 2011-11-04 22:38 +0100 http://bitbucket.org/pypy/pypy/changeset/21cb735ed98a/
Log: hg backout a27a481ec877 diff --git a/pypy/module/__builtin__/functional.py b/pypy/module/__builtin__/functional.py --- a/pypy/module/__builtin__/functional.py +++ b/pypy/module/__builtin__/functional.py @@ -312,11 +312,10 @@ class W_XRange(Wrappable): - def __init__(self, space, start, stop, step): + def __init__(self, space, start, len, step): self.space = space self.start = start - self.stop = stop - self.len = get_len_of_range(space, start, stop, step) + self.len = len self.step = step def descr_new(space, w_subtype, w_start, w_stop=None, w_step=1): @@ -326,8 +325,9 @@ start, stop = 0, start else: stop = _toint(space, w_stop) + howmany = get_len_of_range(space, start, stop, step) obj = space.allocate_instance(W_XRange, w_subtype) - W_XRange.__init__(obj, space, start, stop, step) + W_XRange.__init__(obj, space, start, howmany, step) return space.wrap(obj) def descr_repr(self): @@ -357,12 +357,12 @@ def descr_iter(self): return self.space.wrap(W_XRangeIterator(self.space, self.start, - self.stop, self.step)) + self.len, self.step)) def descr_reversed(self): lastitem = self.start + (self.len-1) * self.step return self.space.wrap(W_XRangeIterator(self.space, lastitem, - self.start - 1, -self.step)) + self.len, -self.step)) def descr_reduce(self): space = self.space @@ -389,24 +389,25 @@ ) class W_XRangeIterator(Wrappable): - def __init__(self, space, start, stop, step): + def __init__(self, space, current, remaining, step): self.space = space - self.current = start - self.stop = stop + self.current = current + self.remaining = remaining self.step = step def descr_iter(self): return self.space.wrap(self) def descr_next(self): - if (self.step > 0 and self.current < self.stop) or (self.step < 0 and self.current > self.stop): + if self.remaining > 0: item = self.current self.current = item + self.step + self.remaining -= 1 return self.space.wrap(item) raise OperationError(self.space.w_StopIteration, self.space.w_None) - #def descr_len(self): - # return self.space.wrap(self.remaining) + def descr_len(self): + return self.space.wrap(self.remaining) def descr_reduce(self): from pypy.interpreter.mixedmodule import MixedModule @@ -417,7 +418,7 @@ w = space.wrap nt = space.newtuple - tup = [w(self.current), w(self.stop), w(self.step)] + tup = [w(self.current), w(self.remaining), w(self.step)] return nt([new_inst, nt(tup)]) W_XRangeIterator.typedef = TypeDef("rangeiterator", diff --git a/pypy/module/_pickle_support/maker.py b/pypy/module/_pickle_support/maker.py --- a/pypy/module/_pickle_support/maker.py +++ b/pypy/module/_pickle_support/maker.py @@ -66,10 +66,10 @@ new_generator.running = running return space.wrap(new_generator) -@unwrap_spec(current=int, stop=int, step=int) -def xrangeiter_new(space, current, stop, step): +@unwrap_spec(current=int, remaining=int, step=int) +def xrangeiter_new(space, current, remaining, step): from pypy.module.__builtin__.functional import W_XRangeIterator - new_iter = W_XRangeIterator(space, current, stop, step) + new_iter = W_XRangeIterator(space, current, remaining, step) return space.wrap(new_iter) @unwrap_spec(identifier=str) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit