Author: Lukas Diekmann <[email protected]>
Branch: list-strategies
Changeset: r47425:fbf3d9dfc40a
Date: 2011-02-23 13:15 +0100
http://bitbucket.org/pypy/pypy/changeset/fbf3d9dfc40a/

Log:    Fixed casting in insert and setitem (ListStrategies)

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
@@ -173,6 +173,7 @@
         raise IndexError
 
     def insert(self, w_list, index, w_item):
+        assert index == 0
         self.append(w_list, w_item)
 
 class ObjectListStrategy(ListStrategy):
@@ -263,19 +264,25 @@
 
     def setitem(self, w_list, index, w_item):
         list_w = cast_from_void_star(w_list.storage, "integer")
-        list_w[index] = w_item
 
-        if not is_W_IntObject(w_item):
-            w_list.strategy = ObjectListStrategy()
-            w_list.strategy.init_from_list_w(w_list, list_w)
+        if is_W_IntObject(w_item):
+            list_w[index] = w_item
+            return
+
+        w_list.strategy = ObjectListStrategy()
+        w_list.strategy.init_from_list_w(w_list, list_w)
+        w_list.setitem(index, w_item)
 
     def insert(self, w_list, index, w_item):
         list_w = cast_from_void_star(w_list.storage, "integer")
-        list_w.insert(index, w_item)
 
-        if not is_W_IntObject(w_item):
-            w_list.strategy = ObjectListStrategy()
-            w_list.strategy.init_from_list_w(w_list, list_w)
+        if is_W_IntObject(w_item):
+            list_w.insert(index, w_item)
+            return
+
+        w_list.strategy = ObjectListStrategy()
+        w_list.strategy.init_from_list_w(w_list, list_w)
+        w_list.insert(index, w_item)
 
 
 class StringListStrategy(ListStrategy):
@@ -323,19 +330,24 @@
 
     def setitem(self, w_list, index, w_item):
         list_w = cast_from_void_star(w_list.storage, "string")
-        list_w[index] = w_item
+        if is_W_StringObject(w_item):
+            list_w[index] = w_item
+            return
 
-        if not is_W_StringObject(w_item):
-            w_list.strategy = ObjectListStrategy()
-            w_list.strategy.init_from_list_w(w_list, list_w)
+        w_list.strategy = ObjectListStrategy()
+        w_list.strategy.init_from_list_w(w_list, list_w)
+        w_list.setitem(index, w_item)
 
     def insert(self, w_list, index, w_item):
         list_w = cast_from_void_star(w_list.storage, "string")
-        list_w.insert(index, w_item)
 
-        if not is_W_StringObject(w_item):
-            w_list.strategy = ObjectListStrategy()
-            w_list.strategy.init_from_list_w(w_list, list_w)
+        if is_W_StringObject(w_item):
+            list_w.insert(index, w_item)
+            return
+
+        w_list.strategy = ObjectListStrategy()
+        w_list.strategy.init_from_list_w(w_list, list_w)
+        w_list.insert(index, w_item)
 
 # _______________________________________________________
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to