summaryrefslogtreecommitdiffstats
path: root/Modules/arraymodule.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-08-12 17:03:09 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-08-12 17:03:09 (GMT)
commit8a87f5d37e6aab91ddc4c6491877b6cbd48a12cf (patch)
tree330bb4b553958f129b31e31ccea2a2c835b19de0 /Modules/arraymodule.c
parentf3e304297e94b9b1956a4ed95debd1b163958d71 (diff)
downloadcpython-8a87f5d37e6aab91ddc4c6491877b6cbd48a12cf.zip
cpython-8a87f5d37e6aab91ddc4c6491877b6cbd48a12cf.tar.gz
cpython-8a87f5d37e6aab91ddc4c6491877b6cbd48a12cf.tar.bz2
Patch #1538606, Patch to fix __index__() clipping.
I modified this patch some by fixing style, some error checking, and adding XXX comments. This patch requires review and some changes are to be expected. I'm checking in now to get the greatest possible review and establish a baseline for moving forward. I don't want this to hold up release if possible.
Diffstat (limited to 'Modules/arraymodule.c')
-rw-r--r--Modules/arraymodule.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 14e5e5d..efa7835 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1572,14 +1572,11 @@ array_repr(arrayobject *a)
return s;
}
-#define HASINDEX(o) PyType_HasFeature((o)->ob_type, Py_TPFLAGS_HAVE_INDEX)
-
static PyObject*
array_subscr(arrayobject* self, PyObject* item)
{
- PyNumberMethods *nb = item->ob_type->tp_as_number;
- if (nb != NULL && HASINDEX(item) && nb->nb_index != NULL) {
- Py_ssize_t i = nb->nb_index(item);
+ if (PyIndex_Check(item)) {
+ Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
if (i==-1 && PyErr_Occurred()) {
return NULL;
}
@@ -1627,9 +1624,8 @@ array_subscr(arrayobject* self, PyObject* item)
static int
array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
{
- PyNumberMethods *nb = item->ob_type->tp_as_number;
- if (nb != NULL && HASINDEX(item) && nb->nb_index != NULL) {
- Py_ssize_t i = nb->nb_index(item);
+ if (PyIndex_Check(item)) {
+ Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
if (i==-1 && PyErr_Occurred())
return -1;
if (i < 0)