10000 gh-111178: Fix function signatures in rangeobject.c by vstinner · Pull Request #131161 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-111178: Fix function signatures in rangeobject.c #131161

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 13, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 27 additions & 24 deletions Objects/rangeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -825,8 +825,9 @@ PyTypeObject PyRange_Type = {
*/

static PyObject *
rangeiter_next(_PyRangeIterObject *r)
rangeiter_next(PyObject *op)
{
_PyRangeIterObject *r = (_PyRangeIterObject*)op;
if (r->len > 0) {
long result = r->start;
r->start = result + r->step;
Expand All @@ -837,17 +838,19 @@ rangeiter_next(_PyRangeIterObject *r)
}

static PyObject *
rangeiter_len(_PyRangeIterObject *r, PyObject *Py_UNUSED(ignored))
rangeiter_len(PyObject *op, PyObject *Py_UNUSED(ignored))
{
_PyRangeIterObject *r = (_PyRangeIterObject*)op;
return PyLong_FromLong(r->len);
}

PyDoc_STRVAR(length_hint_doc,
"Private method returning an estimate of len(list(it)).");

static PyObject *
rangeiter_reduce(_PyRangeIterObject *r, PyObject *Py_UNUSED(ignored))
rangeiter_reduce(PyObject *op, PyObject *Py_UNUSED(ignored))
{
_PyRangeIterObject *r = (_PyRangeIterObject*)op;
PyObject *start=NULL, *stop=NULL, *step=NULL;
PyObject *range;

Expand Down Expand Up @@ -876,8 +879,9 @@ rangeiter_reduce(_PyRangeIterObject *r, PyObject *Py_UNUSED(ignored))
}

static PyObject *
rangeiter_setstate(_PyRangeIterObject *r, PyObject *state)
rangeiter_setstate(PyObject *op, PyObject *state)
{
_PyRangeIterObject *r = (_PyRangeIterObject*)op;
long index = PyLong_AsLong(state);
if (index == -1 && PyErr_Occurred())
return NULL;
Expand All @@ -895,12 +899,9 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");

static PyMethodDef rangeiter_methods[] = {
{"__length_hint__", (PyCFunction)rangeiter_len, METH_NOARGS,
length_hint_doc},
{"__reduce__", (PyCFunction)rangeiter_reduce, METH_NOARGS,
reduce_doc},
{"__setstate__", (PyCFunction)rangeiter_setstate, METH_O,
setstate_doc},
{"__length_hint__", rangeiter_len, METH_NOARGS, length_hint_doc},
{"__reduce__", 10000 rangeiter_reduce, METH_NOARGS, reduce_doc},
{"__setstate__", rangeiter_setstate, METH_O, setstate_doc},
{NULL, NULL} /* sentinel */
};

Expand Down Expand Up @@ -932,7 +933,7 @@ PyTypeObject PyRangeIter_Type = {
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)rangeiter_next, /* tp_iternext */
rangeiter_next, /* tp_iternext */
rangeiter_methods, /* tp_methods */
0, /* tp_members */
};
Expand Down Expand Up @@ -988,15 +989,17 @@ typedef struct {
} longrangeiterobject;

static PyObject *
longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
longrangeiter_len(PyObject *op, PyObject *Py_UNUSED(ignored))
{
longrangeiterobject *r = (longrangeiterobject*)op;
Py_INCREF(r->len);
return r->len;
}

static PyObject *
longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
longrangeiter_reduce(PyObject *op, PyObject *Py_UNUSED(ignored))
{
longrangeiterobject *r = (longrangeiterobject*)op;
PyObject *product, *stop=NULL;
PyObject *range;

Expand All @@ -1023,8 +1026,9 @@ longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
}

static PyObject *
longrangeiter_setstate(longrangeiterobject *r, PyObject *state)
longrangeiter_setstate(PyObject *op, PyObject *state)
{
longrangeiterobject *r = (longrangeiterobject*)op;
PyObject *zero = _PyLong_GetZero(); // borrowed reference
int cmp;

Expand Down Expand Up @@ -1062,27 +1066,26 @@ longrangeiter_setstate(longrangeiterobject *r, PyObject *state)
}

static PyMethodDef longrangeiter_methods[] = {
{"__length_hint__", (PyCFunction)longrangeiter_len, METH_NOARGS,
length_hint_doc},
{"__reduce__", (PyCFunction)longrangeiter_reduce, METH_NOARGS,
reduce_doc},
{"__setstate__", (PyCFunction)longrangeiter_setstate, METH_O,
setstate_doc},
{"__length_hint__", longrangeiter_len, METH_NOARGS, length_hint_doc},
{"__reduce__", longrangeiter_reduce, METH_NOARGS, reduce_doc},
{"__setstate__", longrangeiter_setstate, METH_O, setstate_doc},
{NULL, NULL} /* sentinel */
};

static void
longrangeiter_dealloc(longrangeiterobject *r)
longrangeiter_dealloc(PyObject *op)
{
longrangeiterobject *r = (longrangeiterobject*)op;
Py_XDECREF(r->start);
Py_XDECREF(r->step);
Py_XDECREF(r->len);
PyObject_Free(r);
}

static PyObject *
longrangeiter_next(longrangeiterobject *r)
longrangeiter_next(PyObject *op)
{
longrangeiterobject *r = (longrangeiterobject*)op;
if (PyObject_RichCompareBool(r->len, _PyLong_GetZero(), Py_GT) != 1)
return NULL;

Expand All @@ -1107,7 +1110,7 @@ PyTypeObject PyLongRangeIter_Type = {
sizeof(longrangeiterobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
(destructor)longrangeiter_dealloc, /* tp_dealloc */
longrangeiter_dealloc, /* tp_dealloc */
0, /* tp_vectorcall_offset */
0, /* tp_getattr */
0, /* tp_setattr */
Expand All @@ -1129,7 +1132,7 @@ PyTypeObject PyLongRangeIter_Type = {
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)longrangeiter_next, /* tp_iternext */
longrangeiter_next, /* tp_iternext */
longrangeiter_methods, /* tp_methods */
0,
};
Expand Down
Loading
0