[pypy-svn] r73911 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test
jandem at codespeak.net
jandem at codespeak.net
Tue Apr 20 16:27:12 CEST 2010
Author: jandem
Date: Tue Apr 20 16:27:11 2010
New Revision: 73911
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/slotdefs.py
pypy/branch/cpython-extension/pypy/module/cpyext/test/test_arraymodule.py
Log:
Add wrappers for __setitem__, __delitem__ and slices.
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/slotdefs.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/slotdefs.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/slotdefs.py Tue Apr 20 16:27:11 2010
@@ -5,7 +5,7 @@
PyObject
from pypy.module.cpyext.typeobjectdefs import unaryfunc, wrapperfunc,\
ternaryfunc, PyTypeObjectPtr, binaryfunc, getattrfunc, lenfunc,\
- ssizeargfunc
+ ssizeargfunc, ssizessizeargfunc, ssizeobjargproc
from pypy.module.cpyext.pyobject import from_ref
from pypy.module.cpyext.state import State
from pypy.interpreter.error import OperationError, operationerrfmt
@@ -62,6 +62,29 @@
index = space.int_w(space.index(args_w[0]))
return generic_cpy_call(space, func_target, w_self, index)
+def wrap_sq_setitem(space, w_self, w_args, func):
+ func_target = rffi.cast(ssizeobjargproc, func)
+ check_num_args(space, w_args, 2)
+ args_w = space.fixedview(w_args)
+ index = space.int_w(space.index(args_w[0]))
+ return generic_cpy_call(space, func_target, w_self, index, args_w[1])
+
+def wrap_sq_delitem(space, w_self, w_args, func):
+ func_target = rffi.cast(ssizeobjargproc, func)
+ check_num_args(space, w_args, 1)
+ args_w = space.fixedview(w_args)
+ index = space.int_w(space.index(args_w[0]))
+ null = lltype.nullptr(PyObject.TO)
+ return generic_cpy_call(space, func_target, w_self, index, null)
+
+def wrap_ssizessizeargfunc(space, w_self, w_args, func):
+ func_target = rffi.cast(ssizessizeargfunc, func)
+ check_num_args(space, w_args, 2)
+ args_w = space.fixedview(w_args)
+ start = space.int_w(args_w[0])
+ end = space.int_w(args_w[1])
+ return generic_cpy_call(space, func_target, w_self, start, end)
+
@cpython_api([PyTypeObjectPtr, PyObject, PyObject], PyObject, external=True)
def slot_tp_new(space, type, w_args, w_kwds):
from pypy.module.cpyext.tupleobject import PyTuple_Check
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_arraymodule.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_arraymodule.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_arraymodule.py Tue Apr 20 16:27:11 2010
@@ -14,3 +14,21 @@
arr.append(4)
assert arr.tolist() == [1, 2, 3, 4]
assert len(arr) == 4
+
+ def test_index(self):
+ module = self.import_module(name='array')
+ arr = module.array('i', [1,2,3,4])
+ assert arr[3] == 4
+ raises(IndexError, arr.__getitem__, 10)
+ del arr[2]
+ assert arr.tolist() == [1,2,4]
+ arr[2] = 99
+ assert arr.tolist() == [1,2,99]
+
+ def test_slice_get(self):
+ module = self.import_module(name='array')
+ arr = module.array('i', [1,2,3,4])
+ assert arr[:].tolist() == [1,2,3,4]
+ assert arr[1:].tolist() == [2,3,4]
+ assert arr[:2].tolist() == [1,2]
+ assert arr[1:3].tolist() == [2,3]
More information about the Pypy-commit
mailing list