Commit 215b0c1d authored by Walter Dörwald's avatar Walter Dörwald

Change range_repr() to use %R for the start/stop/step attributes.

parent a86681cd
...@@ -234,52 +234,28 @@ range_item(rangeobject *r, Py_ssize_t i) ...@@ -234,52 +234,28 @@ range_item(rangeobject *r, Py_ssize_t i)
static PyObject * static PyObject *
range_repr(rangeobject *r) range_repr(rangeobject *r)
{ {
PyObject *start_str = NULL, *stop_str = NULL, *step_str = NULL;
PyObject *result = NULL;
Py_ssize_t istart, istep; Py_ssize_t istart, istep;
/* We always need the stop value. */
stop_str = PyObject_Str(r->stop);
if (!stop_str)
return NULL;
/* XXX(nnorwitz): should we use PyObject_Repr instead of str? */
/* Check for special case values for printing. We don't always /* Check for special case values for printing. We don't always
need the start or step values. We don't care about errors need the start or step values. We don't care about errors
(it means overflow), so clear the errors. */ (it means overflow), so clear the errors. */
istart = PyNumber_AsSsize_t(r->start, NULL); istart = PyNumber_AsSsize_t(r->start, NULL);
if (istart != 0 || (istart == -1 && PyErr_Occurred())) { if (istart != 0 || (istart == -1 && PyErr_Occurred())) {
PyErr_Clear(); PyErr_Clear();
start_str = PyObject_Str(r->start);
} }
istep = PyNumber_AsSsize_t(r->step, NULL); istep = PyNumber_AsSsize_t(r->step, NULL);
if (istep != 1 || (istep == -1 && PyErr_Occurred())) { if (istep != 1 || (istep == -1 && PyErr_Occurred())) {
PyErr_Clear(); PyErr_Clear();
step_str = PyObject_Str(r->step);
} }
if (istart == 0 && istep == 1) if (istart == 0 && istep == 1)
result = PyUnicode_FromFormat("range(%s)", return PyUnicode_FromFormat("range(%R)", r->stop);
PyString_AS_STRING(stop_str)); else if (istep == 1)
else if (istep == 1) { return PyUnicode_FromFormat("range(%R, %R)", r->start, r->stop);
if (start_str) else
result = PyUnicode_FromFormat("range(%s, %s)", return PyUnicode_FromFormat("range(%R, %R, %R)",
PyString_AS_STRING(start_str), r->start, r->stop, r->step);
PyString_AS_STRING(stop_str));
}
else if (start_str && step_str)
result = PyUnicode_FromFormat("range(%s, %s, %s)",
PyString_AS_STRING(start_str),
PyString_AS_STRING(stop_str),
PyString_AS_STRING(step_str));
/* else result is NULL and an error should already be set. */
Py_XDECREF(start_str);
Py_XDECREF(stop_str);
Py_XDECREF(step_str);
return result;
} }
static PySequenceMethods range_as_sequence = { static PySequenceMethods range_as_sequence = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment