[pypy-commit] pypy list-strategies: Just create a copy from storage when extending an EmptyList

l.diekmann noreply at buildbot.pypy.org
Fri Sep 23 13:12:43 CEST 2011


Author: Lukas Diekmann <lukas.diekmann at uni-duesseldorf.de>
Branch: list-strategies
Changeset: r47477:24c514951069
Date: 2011-03-16 15:26 +0100
http://bitbucket.org/pypy/pypy/changeset/24c514951069/

Log:	Just create a copy from storage when extending an EmptyList

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
@@ -233,9 +233,9 @@
         self.append(w_list, w_item)
 
     def extend(self, w_list, w_other):
-        #XXX items are wrapped and unwrapped again
-        w_list.strategy = w_other.strategy
-        w_list.strategy.init_from_list_w(w_list, w_other.getitems())
+        strategy = w_list.strategy = w_other.strategy
+        items = strategy.cast_from_void_star(w_other.storage)[:] # copy!
+        w_list.storage = strategy.cast_to_void_star(items)
 
     def reverse(self, w_list):
         pass
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
@@ -378,6 +378,14 @@
         l.extend([10])
         assert l == range(11)
 
+        l = []
+        m = [1,2,3]
+        l.extend(m)
+        m[0] = 5
+        assert m == [5,2,3]
+        assert l == [1,2,3]
+
+
     def test_extend_tuple(self):
         l = l0 = [1]
         l.extend((2,))


More information about the pypy-commit mailing list