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

tismer at codespeak.net tismer at codespeak.net
Thu May 29 16:54:25 CEST 2003


Author: tismer
Date: Thu May 29 16:54:25 2003
New Revision: 688

Modified:
   pypy/trunk/src/pypy/objspace/std/listobject.py
Log:
list.remove works

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 16:54:25 2003
@@ -37,6 +37,9 @@
     def pop(w_self, w_idx=-1):
         return list_pop(w_self.space, w_self, w_idx)
 
+    def remove(w_self, w_any):
+        return list_remove(w_self.space, w_self, w_any)
+
 def list_unwrap(space, w_list):
     items = [space.unwrap(w_item) for w_item in w_list.ob_item[:w_list.ob_size]]
     return list(items)
@@ -193,6 +196,9 @@
     if space.is_true(space.eq(w_attr, space.wrap('pop'))):
         w_builtinfn = make_builtin_func(space, W_ListObject.pop)
         return W_InstMethObject(space, w_list, w_builtinfn)
+    if space.is_true(space.eq(w_attr, space.wrap('remove'))):
+        w_builtinfn = make_builtin_func(space, W_ListObject.remove)
+        return W_InstMethObject(space, w_list, w_builtinfn)
     raise FailedToImplement(space.w_AttributeError)
 
 StdObjSpace.getattr.register(getattr_list, W_ListObject, W_ANY)
@@ -304,6 +310,7 @@
     recycle = [items[i] for i in range(ilow, ihigh)]
     for i in range(ilow, ihigh):
         items[i] = items[i+d]
+    w_list.ob_size -= d
 
 # note that the default value will come back wrapped!!!
 def list_pop(space, w_list, w_idx=-1):
@@ -320,6 +327,17 @@
     _del_slice(w_list, i, i+1)
     return w_res
 
+def list_remove(space, w_list, w_any):
+    eq = space.eq
+    items = w_list.ob_item
+    for i in range(w_list.ob_size):
+        cmp = eq(items[i], w_any)
+        if space.is_true(cmp):
+            _del_slice(w_list, i, i+1)
+            return space.w_None
+    raise OperationError(space.w_IndexError,
+                         space.wrap("list.remove(x): x not in list"))
+
 """
 static PyMethodDef list_methods[] = {
     {"append",  (PyCFunction)listappend,  METH_O, append_doc},


More information about the Pypy-commit mailing list