Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r57399:71931876cb9c
Date: 2012-09-20 11:00 +0200
http://bitbucket.org/pypy/pypy/changeset/71931876cb9c/
Log: merge
diff --git a/pypy/doc/jit/pyjitpl5.rst b/pypy/doc/jit/pyjitpl5.rst
--- a/pypy/doc/jit/pyjitpl5.rst
+++ b/pypy/doc/jit/pyjitpl5.rst
@@ -149,7 +149,7 @@
A *virtual* value is an array, struct, or RPython level instance that is
created
during the loop and does not escape from it via calls or longevity past the
-loop. Since it is only used by the JIT, it be "optimized out"; the value
+loop. Since it is only used by the JIT, it can be "optimized out"; the value
doesn't have to be allocated at all and its fields can be stored as first class
values instead of deferencing them in memory. Virtuals allow temporary objects
in the interpreter to be unwrapped. For example, a W_IntObject in the PyPy can
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):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit