[pypy-svn] r72758 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test
xoraxax at codespeak.net
xoraxax at codespeak.net
Wed Mar 24 22:05:01 CET 2010
Author: xoraxax
Date: Wed Mar 24 22:05:00 2010
New Revision: 72758
Added:
pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py (contents, props changed)
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/tupleobject.py
Log:
Gah, the new exception handling is annoying. Can you please fix this test, amaury? The exception of PyErr_BadInternallCall is eaten.
Added: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py
==============================================================================
--- (empty file)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_tupleobject.py Wed Mar 24 22:05:00 2010
@@ -0,0 +1,11 @@
+import py.test
+
+from pypy.module.cpyext.test.test_cpyext import BaseApiTest
+
+class TestTupleObject(BaseApiTest):
+ def test_tupleobject(self, space, api):
+ assert not api.PyTuple_Check(space.w_None)
+ py.test.raises(TypeError, api.PyTuple_SetItem, space.w_None,
+ 0, space.w_None)
+ api.PyTuple_SetItem(space.w_None, 0, space.w_None)
+ #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 Mar 24 22:05:00 2010
@@ -1,8 +1,14 @@
from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.module.cpyext.api import cpython_api, PyObject, Py_ssize_t
+from pypy.module.cpyext.api import cpython_api, PyObject, Py_ssize_t, \
+ general_check, CANNOT_FAIL
from pypy.module.cpyext.macros import Py_DECREF
+from pypy.module.cpyext.pyerrors import PyErr_BadInternalCall
from pypy.objspace.std.tupleobject import W_TupleObject
+ at cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL)
+def PyTuple_Check(space, w_obj):
+ w_type = space.w_tuple
+ return general_check(space, w_obj, w_type)
@cpython_api([Py_ssize_t], PyObject)
def PyTuple_New(space, size):
@@ -10,13 +16,15 @@
@cpython_api([PyObject, Py_ssize_t, PyObject], rffi.INT_real, error=-1)
def PyTuple_SetItem(space, w_t, pos, w_obj):
- assert isinstance(w_t, W_TupleObject)
+ if not PyTuple_Check(space, w_t):
+ PyErr_BadInternalCall(space)
+ assert isinstance(w_t, W_TupleObject) # XXX add check here
w_t.wrappeditems[pos] = w_obj
- Py_DECREF(space, w_obj) # SetItem steals a reference!
+ Py_DECREF(space, w_obj) # SetItem steals a reference! XXX this needs to go into the wrapper
return 0
@cpython_api([PyObject, Py_ssize_t], PyObject)
def PyTuple_GetItem(space, w_t, pos):
- assert isinstance(w_t, W_TupleObject)
+ assert isinstance(w_t, W_TupleObject) # XXX add check here
w_obj = w_t.wrappeditems[pos]
return w_obj
More information about the Pypy-commit
mailing list