bpo-37999: No longer use __int__ in implicit integer conversions. (GH-15636)
Only __index__ should be used to make integer conversions lossless.
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 732703e..fb1b82c 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -337,17 +337,6 @@
(unsigned long) ((unsigned int *)ap->ob_item)[i]);
}
-static PyObject *
-get_int_unless_float(PyObject *v)
-{
- if (PyFloat_Check(v)) {
- PyErr_SetString(PyExc_TypeError,
- "array item must be integer");
- return NULL;
- }
- return _PyLong_FromNbIndexOrNbInt(v);
-}
-
static int
II_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
{
@@ -355,7 +344,7 @@
int do_decref = 0; /* if nb_int was called */
if (!PyLong_Check(v)) {
- v = get_int_unless_float(v);
+ v = PyNumber_Index(v);
if (NULL == v) {
return -1;
}
@@ -415,7 +404,7 @@
int do_decref = 0; /* if nb_int was called */
if (!PyLong_Check(v)) {
- v = get_int_unless_float(v);
+ v = PyNumber_Index(v);
if (NULL == v) {
return -1;
}
@@ -468,7 +457,7 @@
int do_decref = 0; /* if nb_int was called */
if (!PyLong_Check(v)) {
- v = get_int_unless_float(v);
+ v = PyNumber_Index(v);
if (NULL == v) {
return -1;
}