[pypy-svn] rev 672 - pypy/trunk/src/pypy/objspace/std

tismer at codespeak.net tismer at codespeak.net
Thu May 29 15:38:33 CEST 2003


Author: tismer
Date: Thu May 29 15:38:33 2003
New Revision: 672

Modified:
   pypy/trunk/src/pypy/objspace/std/listobject.py
Log:
more methods for listobject

Modified: pypy/trunk/src/pypy/objspace/std/listobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/listobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/listobject.py	Thu May 29 15:38:33 2003
@@ -31,6 +31,9 @@
     def insert(w_self, w_idx, w_obj):
         return list_insert(w_self.space, w_self, w_idx, w_obj)
 
+    def extend(w_self, w_seq):
+        return list_extend(w_self.space, w_self, w_seq)
+
 
 def list_unwrap(space, w_list):
     items = [space.unwrap(w_item) for w_item in w_list.ob_item[:w_list.ob_size]]
@@ -173,7 +176,7 @@
     w_res.ob_size = slicelength
     return w_res
 
-StdObjSpace.setitem.register(setitem_list_slice, W_ListObject, W_SliceObject, W_ANY)
+StdObjSpace.setitem.register(setitem_list_slice, W_ListObject, W_SliceObject, W_ListObject)
 
 def getattr_list(space, w_list, w_attr):
     if space.is_true(space.eq(w_attr, space.wrap('append'))):
@@ -182,6 +185,9 @@
     if space.is_true(space.eq(w_attr, space.wrap('insert'))):
         w_builtinfn = make_builtin_func(space, W_ListObject.insert)
         return W_InstMethObject(space, w_list, w_builtinfn)
+    if space.is_true(space.eq(w_attr, space.wrap('extend'))):
+        w_builtinfn = make_builtin_func(space, W_ListObject.extend)
+        return W_InstMethObject(space, w_list, w_builtinfn)
     raise FailedToImplement(space.w_AttributeError)
 
 StdObjSpace.getattr.register(getattr_list, W_ListObject, W_ANY)
@@ -245,9 +251,7 @@
             items[p] = old_items[p]
 
 def ins1(w_list, where, w_any):
-    print w_list.ob_size, w_list.ob_item
     list_resize(w_list, w_list.ob_size+1)
-    print w_list.ob_size, w_list.ob_item
     size = w_list.ob_size
     items = w_list.ob_item
     if where < 0:
@@ -258,11 +262,8 @@
         where = size
     for i in range(size, where, -1):
         items[i] = items[i-1]
-    print w_list.ob_size, w_list.ob_item
     items[where] = w_any
-    print w_list.ob_size, w_list.ob_item
     w_list.ob_size += 1
-    print w_list.ob_size, w_list.ob_item
 
 def list_insert(space, w_list, w_where, w_any):
     ins1(w_list, w_where.intval, w_any)
@@ -272,6 +273,16 @@
     ins1(w_list, w_list.ob_size, w_any)
     return space.w_None
 
+def list_extend(space, w_list, w_any):
+    lis = space.unpackiterable(w_any)
+    newlen = w_list.ob_size + len(lis)
+    list_resize(w_list, newlen)
+    d = w_list.ob_size
+    items = w_list.ob_item
+    for i in range(len(lis)):
+        items[d+i] = lis[i]
+    return space.w_None
+
 """
 static PyMethodDef list_methods[] = {
     {"append",  (PyCFunction)listappend,  METH_O, append_doc},


More information about the Pypy-commit mailing list