[issue41078] [C API] Convert PyTuple_GET_ITEM() macro to a static inline function

STINNER Victor report at bugs.python.org
Mon Jun 22 17:38:18 EDT 2020


STINNER Victor <vstinner at python.org> added the comment:

PySequence_Fast_ITEMS() is used in numpy at 7 lines:

numpy/core/src/common/ufunc_override.c:118:        *out_objs = PySequence_Fast_ITEMS(seq);

---
PyUFuncOverride_GetOutObjects(PyObject *kwds, PyObject **out_kwd_obj, PyObject ***out_objs)
---
=> PyObject** is part of the numpy C API (it's even a pointer to a PyObject** array)!


numpy/core/src/multiarray/arrayfunction_override.c:80:    PyObject **items = PySequence_Fast_ITEMS(relevant_args);
---
static int
get_implementing_args_and_methods(PyObject *relevant_args,
                                  PyObject **implementing_args,
                                  PyObject **methods)
{
    int num_implementing_args = 0;
    Py_ssize_t i;
    int j;

    PyObject **items = PySequence_Fast_ITEMS(relevant_args);
    Py_ssize_t length = PySequence_Fast_GET_SIZE(relevant_args);

    for (i = 0; i < length; i++) {
        int new_class = 1;
        PyObject *argument = items[i];
----

=> here PySequence_Fast_GET_ITEM() can be used instead.


numpy/core/src/multiarray/arrayfunction_override.c:167:    PyObject **items = PySequence_Fast_ITEMS(types);
numpy/core/src/multiarray/common.c:434:    objects = PySequence_Fast_ITEMS(seq);
numpy/core/src/multiarray/iterators.c:1368:    ret = multiiter_new_impl(n, PySequence_Fast_ITEMS(fast_seq));
numpy/core/src/multiarray/methods.c:1015:    in_objs = PySequence_Fast_ITEMS(fast);
numpy/core/src/umath/override.c:38:    arg_objs = PySequence_Fast_ITEMS(args);

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue41078>
_______________________________________


More information about the Python-bugs-list mailing list