mirror of https://github.com/python/cpython
I_getiter(): Function for the tp_iter slot of Itype so that
cStringIO's can participate in the iterator protocol. Fill the Itype.tp_iter slot with I_getiter()
This commit is contained in:
parent
bdefa0b3de
commit
3e8be722d9
|
@ -653,33 +653,58 @@ I_getattr(Iobject *self, char *name) {
|
||||||
return Py_FindMethod(I_methods, (PyObject *)self, name);
|
return Py_FindMethod(I_methods, (PyObject *)self, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
I_getiter(Iobject *self)
|
||||||
|
{
|
||||||
|
PyObject *myreadline = PyObject_GetAttrString((PyObject*)self,
|
||||||
|
"readline");
|
||||||
|
PyObject *emptystring = PyString_FromString("");
|
||||||
|
PyObject *iter = NULL;
|
||||||
|
if (!myreadline || !emptystring)
|
||||||
|
goto finally;
|
||||||
|
|
||||||
|
iter = PyCallIter_New(myreadline, emptystring);
|
||||||
|
finally:
|
||||||
|
Py_XDECREF(myreadline);
|
||||||
|
Py_XDECREF(emptystring);
|
||||||
|
return iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static char Itype__doc__[] =
|
static char Itype__doc__[] =
|
||||||
"Simple type for treating strings as input file streams"
|
"Simple type for treating strings as input file streams"
|
||||||
;
|
;
|
||||||
|
|
||||||
static PyTypeObject Itype = {
|
static PyTypeObject Itype = {
|
||||||
PyObject_HEAD_INIT(NULL)
|
PyObject_HEAD_INIT(NULL)
|
||||||
0, /*ob_size*/
|
0, /*ob_size*/
|
||||||
"StringI", /*tp_name*/
|
"StringI", /*tp_name*/
|
||||||
sizeof(Iobject), /*tp_basicsize*/
|
sizeof(Iobject), /*tp_basicsize*/
|
||||||
0, /*tp_itemsize*/
|
0, /*tp_itemsize*/
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)I_dealloc, /*tp_dealloc*/
|
(destructor)I_dealloc, /*tp_dealloc*/
|
||||||
(printfunc)0, /*tp_print*/
|
(printfunc)0, /*tp_print*/
|
||||||
(getattrfunc)I_getattr, /*tp_getattr*/
|
(getattrfunc)I_getattr, /*tp_getattr*/
|
||||||
(setattrfunc)0, /*tp_setattr*/
|
(setattrfunc)0, /*tp_setattr*/
|
||||||
(cmpfunc)0, /*tp_compare*/
|
(cmpfunc)0, /*tp_compare*/
|
||||||
(reprfunc)0, /*tp_repr*/
|
(reprfunc)0, /*tp_repr*/
|
||||||
0, /*tp_as_number*/
|
0, /*tp_as_number*/
|
||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
(hashfunc)0, /*tp_hash*/
|
(hashfunc)0, /*tp_hash*/
|
||||||
(ternaryfunc)0, /*tp_call*/
|
(ternaryfunc)0, /*tp_call*/
|
||||||
(reprfunc)0, /*tp_str*/
|
(reprfunc)0, /*tp_str*/
|
||||||
|
0, /* tp_getattro */
|
||||||
/* Space for future expansion */
|
0, /* tp_setattro */
|
||||||
0L,0L,0L,0L,
|
0, /* tp_as_buffer */
|
||||||
Itype__doc__ /* Documentation string */
|
Py_TPFLAGS_DEFAULT, /* tp_flags */
|
||||||
|
Itype__doc__, /* tp_doc */
|
||||||
|
0, /* tp_traverse */
|
||||||
|
0, /* tp_clear */
|
||||||
|
0, /* tp_richcompare */
|
||||||
|
0, /* tp_weaklistoffset */
|
||||||
|
(getiterfunc)I_getiter, /* tp_iter */
|
||||||
|
0, /* tp_iternext */
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
Loading…
Reference in New Issue