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