[pypy-svn] r73495 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test

trundle at codespeak.net trundle at codespeak.net
Wed Apr 7 03:47:31 CEST 2010


Author: trundle
Date: Wed Apr  7 03:47:30 2010
New Revision: 73495

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/stubs.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/tupleobject.py
Log:
Add PyTuple_Size.


Modified: pypy/branch/cpython-extension/pypy/module/cpyext/stubs.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/stubs.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/stubs.py	Wed Apr  7 03:47:30 2010
@@ -5519,14 +5519,6 @@
     changes in your code for properly supporting 64-bit systems."""
     raise NotImplementedError
 
- at cpython_api([PyObject], Py_ssize_t)
-def PyTuple_Size(space, p):
-    """Take a pointer to a tuple object, and return the size of that tuple.
-    
-    This function returned an int type. This might require changes
-    in your code for properly supporting 64-bit systems."""
-    raise NotImplementedError
-
 @cpython_api([PyObject, Py_ssize_t], PyObject, borrowed=True)
 def PyTuple_GET_ITEM(space, p, pos):
     """Like PyTuple_GetItem(), but does no checking of its arguments.

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py	Wed Apr  7 03:47:30 2010
@@ -6,4 +6,8 @@
     def test_tupleobject(self, space, api):
         assert not api.PyTuple_Check(space.w_None)
         assert api.PyTuple_SetItem(space.w_None, 0, space.w_None) == -1
+        atuple = space.newtuple([0, 1, 'yay'])
+        assert api.PyTuple_Size(atuple) == 3
+        assert api.PyTuple_GET_SIZE(atuple) == 3
+        raises(TypeError, api.PyTuple_Size(space.newlist([])))
         api.PyErr_Clear()

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/tupleobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/tupleobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/tupleobject.py	Wed Apr  7 03:47:30 2010
@@ -1,3 +1,4 @@
+from pypy.interpreter.error import OperationError
 from pypy.rpython.lltypesystem import rffi, lltype
 from pypy.module.cpyext.api import (cpython_api, Py_ssize_t, CANNOT_FAIL,
                                     build_type_checkers)
@@ -38,3 +39,10 @@
     assert isinstance(w_t, W_TupleObject)
     return len(w_t.wrappeditems)
 
+ at cpython_api([PyObject], Py_ssize_t, error=-1)
+def PyTuple_Size(space, ref):
+    """Take a pointer to a tuple object, and return the size of that tuple."""
+    if not PyTuple_Check(space, ref):
+        raise OperationError(space.w_TypeError,
+                             space.wrap("expected tuple object"))
+    return PyTuple_GET_SIZE(space, ref)



More information about the Pypy-commit mailing list