mirror of https://github.com/python/cpython.git
Remove "static forward" declaration. Move constructors
after the type objects.
This commit is contained in:
parent
9eec489c4a
commit
72d206776d
|
@ -200,53 +200,6 @@ typedef struct {
|
||||||
long len;
|
long len;
|
||||||
} rangeiterobject;
|
} rangeiterobject;
|
||||||
|
|
||||||
static PyTypeObject Pyrangeiter_Type;
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
range_iter(PyObject *seq)
|
|
||||||
{
|
|
||||||
rangeiterobject *it;
|
|
||||||
|
|
||||||
if (!PyRange_Check(seq)) {
|
|
||||||
PyErr_BadInternalCall();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
it = PyObject_New(rangeiterobject, &Pyrangeiter_Type);
|
|
||||||
if (it == NULL)
|
|
||||||
return NULL;
|
|
||||||
it->index = 0;
|
|
||||||
it->start = ((rangeobject *)seq)->start;
|
|
||||||
it->step = ((rangeobject *)seq)->step;
|
|
||||||
it->len = ((rangeobject *)seq)->len;
|
|
||||||
return (PyObject *)it;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
range_reverse(PyObject *seq)
|
|
||||||
{
|
|
||||||
rangeiterobject *it;
|
|
||||||
long start, step, len;
|
|
||||||
|
|
||||||
if (!PyRange_Check(seq)) {
|
|
||||||
PyErr_BadInternalCall();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
it = PyObject_New(rangeiterobject, &Pyrangeiter_Type);
|
|
||||||
if (it == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
start = ((rangeobject *)seq)->start;
|
|
||||||
step = ((rangeobject *)seq)->step;
|
|
||||||
len = ((rangeobject *)seq)->len;
|
|
||||||
|
|
||||||
it->index = 0;
|
|
||||||
it->start = start + (len-1) * step;
|
|
||||||
it->step = -step;
|
|
||||||
it->len = len;
|
|
||||||
|
|
||||||
return (PyObject *)it;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
rangeiter_next(rangeiterobject *r)
|
rangeiter_next(rangeiterobject *r)
|
||||||
{
|
{
|
||||||
|
@ -301,3 +254,48 @@ static PyTypeObject Pyrangeiter_Type = {
|
||||||
rangeiter_methods, /* tp_methods */
|
rangeiter_methods, /* tp_methods */
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
range_iter(PyObject *seq)
|
||||||
|
{
|
||||||
|
rangeiterobject *it;
|
||||||
|
|
||||||
|
if (!PyRange_Check(seq)) {
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
it = PyObject_New(rangeiterobject, &Pyrangeiter_Type);
|
||||||
|
if (it == NULL)
|
||||||
|
return NULL;
|
||||||
|
it->index = 0;
|
||||||
|
it->start = ((rangeobject *)seq)->start;
|
||||||
|
it->step = ((rangeobject *)seq)->step;
|
||||||
|
it->len = ((rangeobject *)seq)->len;
|
||||||
|
return (PyObject *)it;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
range_reverse(PyObject *seq)
|
||||||
|
{
|
||||||
|
rangeiterobject *it;
|
||||||
|
long start, step, len;
|
||||||
|
|
||||||
|
if (!PyRange_Check(seq)) {
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
it = PyObject_New(rangeiterobject, &Pyrangeiter_Type);
|
||||||
|
if (it == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
start = ((rangeobject *)seq)->start;
|
||||||
|
step = ((rangeobject *)seq)->step;
|
||||||
|
len = ((rangeobject *)seq)->len;
|
||||||
|
|
||||||
|
it->index = 0;
|
||||||
|
it->start = start + (len-1) * step;
|
||||||
|
it->step = -step;
|
||||||
|
it->len = len;
|
||||||
|
|
||||||
|
return (PyObject *)it;
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Written and maintained by Raymond D. Hettinger <python@rcn.com>
|
Written and maintained by Raymond D. Hettinger <python@rcn.com>
|
||||||
Derived from Lib/sets.py and Objects/dictobject.c.
|
Derived from Lib/sets.py and Objects/dictobject.c.
|
||||||
|
|
||||||
Copyright (c) 2003-5 Python Software Foundation.
|
Copyright (c) 2003-6 Python Software Foundation.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -719,8 +719,6 @@ set_nohash(PyObject *self)
|
||||||
|
|
||||||
/***** Set iterator type ***********************************************/
|
/***** Set iterator type ***********************************************/
|
||||||
|
|
||||||
static PyTypeObject PySetIter_Type; /* Forward */
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PySetObject *si_set; /* Set to NULL when iterator is exhausted */
|
PySetObject *si_set; /* Set to NULL when iterator is exhausted */
|
||||||
|
@ -729,20 +727,6 @@ typedef struct {
|
||||||
long len;
|
long len;
|
||||||
} setiterobject;
|
} setiterobject;
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
set_iter(PySetObject *so)
|
|
||||||
{
|
|
||||||
setiterobject *si = PyObject_New(setiterobject, &PySetIter_Type);
|
|
||||||
if (si == NULL)
|
|
||||||
return NULL;
|
|
||||||
Py_INCREF(so);
|
|
||||||
si->si_set = so;
|
|
||||||
si->si_used = so->used;
|
|
||||||
si->si_pos = 0;
|
|
||||||
si->len = so->used;
|
|
||||||
return (PyObject *)si;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setiter_dealloc(setiterobject *si)
|
setiter_dealloc(setiterobject *si)
|
||||||
{
|
{
|
||||||
|
@ -838,6 +822,20 @@ static PyTypeObject PySetIter_Type = {
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
set_iter(PySetObject *so)
|
||||||
|
{
|
||||||
|
setiterobject *si = PyObject_New(setiterobject, &PySetIter_Type);
|
||||||
|
if (si == NULL)
|
||||||
|
return NULL;
|
||||||
|
Py_INCREF(so);
|
||||||
|
si->si_set = so;
|
||||||
|
si->si_used = so->used;
|
||||||
|
si->si_pos = 0;
|
||||||
|
si->len = so->used;
|
||||||
|
return (PyObject *)si;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
set_update_internal(PySetObject *so, PyObject *other)
|
set_update_internal(PySetObject *so, PyObject *other)
|
||||||
{
|
{
|
||||||
|
|
|
@ -791,27 +791,6 @@ typedef struct {
|
||||||
PyTupleObject *it_seq; /* Set to NULL when iterator is exhausted */
|
PyTupleObject *it_seq; /* Set to NULL when iterator is exhausted */
|
||||||
} tupleiterobject;
|
} tupleiterobject;
|
||||||
|
|
||||||
PyTypeObject PyTupleIter_Type;
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
tuple_iter(PyObject *seq)
|
|
||||||
{
|
|
||||||
tupleiterobject *it;
|
|
||||||
|
|
||||||
if (!PyTuple_Check(seq)) {
|
|
||||||
PyErr_BadInternalCall();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
it = PyObject_GC_New(tupleiterobject, &PyTupleIter_Type);
|
|
||||||
if (it == NULL)
|
|
||||||
return NULL;
|
|
||||||
it->it_index = 0;
|
|
||||||
Py_INCREF(seq);
|
|
||||||
it->it_seq = (PyTupleObject *)seq;
|
|
||||||
_PyObject_GC_TRACK(it);
|
|
||||||
return (PyObject *)it;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tupleiter_dealloc(tupleiterobject *it)
|
tupleiter_dealloc(tupleiterobject *it)
|
||||||
{
|
{
|
||||||
|
@ -901,3 +880,22 @@ PyTypeObject PyTupleIter_Type = {
|
||||||
tupleiter_methods, /* tp_methods */
|
tupleiter_methods, /* tp_methods */
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
tuple_iter(PyObject *seq)
|
||||||
|
{
|
||||||
|
tupleiterobject *it;
|
||||||
|
|
||||||
|
if (!PyTuple_Check(seq)) {
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
it = PyObject_GC_New(tupleiterobject, &PyTupleIter_Type);
|
||||||
|
if (it == NULL)
|
||||||
|
return NULL;
|
||||||
|
it->it_index = 0;
|
||||||
|
Py_INCREF(seq);
|
||||||
|
it->it_seq = (PyTupleObject *)seq;
|
||||||
|
_PyObject_GC_TRACK(it);
|
||||||
|
return (PyObject *)it;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue