From: Chris Jerdonek Date: Sun, 7 Oct 2012 21:56:27 +0000 (-0700) Subject: Issue #14783: Merge changes from 3.2. X-Git-Tag: v3.4.0a1~2307^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=042fa653ab91c05dfb50e227361ba345e45169c7;p=python Issue #14783: Merge changes from 3.2. --- 042fa653ab91c05dfb50e227361ba345e45169c7 diff --cc Doc/library/functions.rst index c2b3b212d2,2575d7f787..e969194867 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@@ -1202,8 -1236,8 +1202,9 @@@ are always available. They are listed standard type hierarchy in :ref:`types`. +.. _func-str: - .. function:: str([object[, encoding[, errors]]]) + .. function:: str(object='') + str(object[, encoding[, errors]]) Return a string version of an object, using one of the following modes: diff --cc Objects/rangeobject.c index c47a4ff034,b67b9694d5..68d563694a --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@@ -964,52 -826,6 +965,52 @@@ rangeiter_len(rangeiterobject *r PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(it))."); +static PyObject * +rangeiter_reduce(rangeiterobject *r) +{ + PyObject *start=NULL, *stop=NULL, *step=NULL; + PyObject *range; - ++ + /* create a range object for pickling */ + start = PyLong_FromLong(r->start); + if (start == NULL) + goto err; + stop = PyLong_FromLong(r->start + r->len * r->step); + if (stop == NULL) + goto err; + step = PyLong_FromLong(r->step); + if (step == NULL) + goto err; + range = (PyObject*)make_range_object(&PyRange_Type, + start, stop, step); + if (range == NULL) + goto err; + /* return the result */ + return Py_BuildValue("N(N)i", _PyObject_GetBuiltin("iter"), range, r->index); +err: + Py_XDECREF(start); + Py_XDECREF(stop); + Py_XDECREF(step); + return NULL; +} + +static PyObject * +rangeiter_setstate(rangeiterobject *r, PyObject *state) +{ + long index = PyLong_AsLong(state); + if (index == -1 && PyErr_Occurred()) + return NULL; + if (index < 0 || index >= r->len) { + PyErr_SetString(PyExc_ValueError, "index out of range"); + return NULL; + } + r->index = index; + Py_RETURN_NONE; +} + +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},