[pypy-commit] pypy default: issue1266: fix RangeListStrategy append to be more careful when empty
pjenvey
noreply at buildbot.pypy.org
Wed Sep 19 19:31:57 CEST 2012
Author: Philip Jenvey <pjenvey at underboss.org>
Branch:
Changeset: r57395:efca15c9d78e
Date: 2012-09-19 10:27 -0700
http://bitbucket.org/pypy/pypy/changeset/efca15c9d78e/
Log: issue1266: fix RangeListStrategy append to be more careful when
empty
diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py
--- a/pypy/objspace/std/listobject.py
+++ b/pypy/objspace/std/listobject.py
@@ -589,12 +589,14 @@
def append(self, w_list, w_item):
if is_W_IntObject(w_item):
l = self.unerase(w_list.lstorage)
- step = l[1]
- last_in_range = self._getitem_unwrapped(w_list, -1)
- if self.unwrap(w_item) - step == last_in_range:
- new = self.erase((l[0], l[1], l[2] + 1))
- w_list.lstorage = new
- return
+ length = l[2]
+ if length:
+ last_in_range = self._getitem_unwrapped(w_list, -1)
+ step = l[1]
+ if self.unwrap(w_item) - step == last_in_range:
+ new = self.erase((l[0], step, length + 1))
+ w_list.lstorage = new
+ return
self.switch_to_integer_strategy(w_list)
else:
diff --git a/pypy/objspace/std/test/test_listobject.py b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -1345,6 +1345,13 @@
l.reverse()
assert l == [2,1,0]
+ def test_issue1266(self):
+ l = range(1)
+ l.pop()
+ # would previously crash
+ l.append(1)
+ assert l == [1]
+
class AppTestWithoutStrategies(object):
def setup_class(cls):
More information about the pypy-commit
mailing list