[pypy-commit] pypy py3.5: cant use deque.copy within deque.add or deque.imul, translation fixes
plan_rich
pypy.commits at gmail.com
Mon Oct 10 10:06:56 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5
Changeset: r87692:d973c433c52b
Date: 2016-10-10 16:05 +0200
http://bitbucket.org/pypy/pypy/changeset/d973c433c52b/
Log: cant use deque.copy within deque.add or deque.imul, translation
fixes
diff --git a/pypy/module/_collections/interp_deque.py b/pypy/module/_collections/interp_deque.py
--- a/pypy/module/_collections/interp_deque.py
+++ b/pypy/module/_collections/interp_deque.py
@@ -176,9 +176,10 @@
self.append(w_obj)
def add(self, w_iterable):
- copied = self.copy()
- copied.extend(w_iterable)
- return self.space.wrap(copied)
+ copy = W_Deque(self.space)
+ copy.extend(self.iter())
+ copy.extend(w_iterable)
+ return self.space.wrap(copy)
def iadd(self, w_iterable):
self.extend(w_iterable)
@@ -196,29 +197,15 @@
def imul(self, w_int):
space = self.space
- copied = self.copy()
+ copy = W_Deque(space)
+ copy.extend(self.iter())
num = space.int_w(w_int)
for _ in range(num - 1):
- self.extend(copied)
+ self.extend(copy)
return space.wrap(self)
- def copy(self):
- """ A shallow copy """
- space = self.space
- w_iter = space.iter(w_iterable)
- copy = W_Deque(self.space)
- while True:
- try:
- w_obj = space.next(w_iter)
- except OperationError as e:
- if e.match(space, space.w_StopIteration):
- break
- raise
- copy.appendleft(w_obj)
- return copy
-
def extendleft(self, w_iterable):
"Extend the left side of the deque with elements from the iterable"
# Handle case where id(deque) == id(iterable)
@@ -350,10 +337,8 @@
if w_start is not None:
start = space.int_w(w_start)
-
if start < 0:
start += _len
-
if start < 0:
start = 0
elif start > _len:
@@ -361,24 +346,22 @@
if w_stop is not None:
stop = space.int_w(w_stop)
-
if stop < 0:
stop += _len
-
if 0 <= stop > _len:
stop = _len
for i in range(0, stop):
- value = space.next(w_iter)
-
- if i < start:
- continue
-
- if space.eq_w(value, w_x):
- return space.wrap(i)
-
- x = space.repr(w_x)
- raise oefmt(self.space.w_ValueError, "%s is not in deque", x)
+ try:
+ w_obj = space.next(w_iter)
+ if i < start:
+ continue
+ if space.eq_w(w_obj, w_x):
+ return space.wrap(i)
+ except OperationError as e:
+ if not e.match(space, space.w_StopIteration):
+ raise
+ raise oefmt(space.w_ValueError, "%R is not in deque", w_x)
def reviter(self):
"Return a reverse iterator over the deque."
More information about the pypy-commit
mailing list