Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2b83b46

Browse files
committed
Remove the tp_print handler.
Revise the tp_repr handler to produce a more "minimal" presentation. Make the tolist() method use PyArg_ParseTuple() and provide a docstring.
1 parent fd342bf commit 2b83b46

1 file changed

Lines changed: 27 additions & 31 deletions

File tree

Objects/rangeobject.c

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -58,36 +58,30 @@ range_length(rangeobject *r)
5858
return r->len * r->reps;
5959
}
6060

61-
static int
62-
range_print(rangeobject *r, FILE *fp, int flags)
63-
{
64-
int i, j;
65-
66-
fprintf(fp, "(");
67-
for (i = 0; i < r->reps; ++i)
68-
for (j = 0; j < r->len; ++j) {
69-
if (j > 0 || i > 0)
70-
fprintf(fp, ", ");
71-
72-
fprintf(fp, "%ld", r->start + j * r->step);
73-
}
74-
75-
if (r->len == 1 && r->reps == 1)
76-
fprintf(fp, ",");
77-
fprintf(fp, ")");
78-
return 0;
79-
}
80-
8161
static PyObject *
8262
range_repr(rangeobject *r)
8363
{
84-
char buf[80];
85-
sprintf(buf, "(xrange(%ld, %ld, %ld) * %d)",
86-
r->start,
87-
r->start + r->len * r->step,
88-
r->step,
89-
r->reps);
90-
return PyString_FromString(buf);
64+
char buf1[80];
65+
char buf2[80];
66+
67+
if (r->start == 0 && r->step == 1) {
68+
snprintf(buf1, sizeof(buf1), "xrange(%ld)",
69+
r->start + r->len * r->step);
70+
}
71+
else {
72+
char *fmt = "xrange(%ld, %ld, %ld)";
73+
if (r->step == 1)
74+
fmt = "xrange(%ld, %ld)";
75+
snprintf(buf1, sizeof(buf1), fmt,
76+
r->start,
77+
r->start + r->len * r->step,
78+
r->step);
79+
}
80+
if (r->reps != 1) {
81+
snprintf(buf2, sizeof(buf2),
82+
"(%s * %d)", buf1, r->reps);
83+
}
84+
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
9185
}
9286

9387
static PyObject *
@@ -170,7 +164,7 @@ range_tolist(rangeobject *self, PyObject *args)
170164
int j;
171165
int len = self->len * self->reps;
172166

173-
if (! PyArg_Parse(args, ""))
167+
if (! PyArg_ParseTuple(args, ":tolist"))
174168
return NULL;
175169

176170
if ((thelist = PyList_New(len)) == NULL)
@@ -188,7 +182,9 @@ static PyObject *
188182
range_getattr(rangeobject *r, char *name)
189183
{
190184
static PyMethodDef range_methods[] = {
191-
{"tolist", (PyCFunction)range_tolist},
185+
{"tolist", (PyCFunction)range_tolist, METH_VARARGS,
186+
"tolist() -> list\n"
187+
"Return a list object with the same values."},
192188
{NULL, NULL}
193189
};
194190

@@ -228,11 +224,11 @@ PyTypeObject PyRange_Type = {
228224
sizeof(rangeobject), /* Basic object size */
229225
0, /* Item size for varobject */
230226
(destructor)range_dealloc, /*tp_dealloc*/
231-
(printfunc)range_print, /*tp_print*/
227+
0, /*tp_print*/
232228
(getattrfunc)range_getattr, /*tp_getattr*/
233229
0, /*tp_setattr*/
234230
(cmpfunc)range_compare, /*tp_compare*/
235-
(reprfunc)range_repr, /*tp_repr*/
231+
(reprfunc)range_repr, /*tp_repr*/
236232
0, /*tp_as_number*/
237233
&range_as_sequence, /*tp_as_sequence*/
238234
0, /*tp_as_mapping*/

0 commit comments

Comments
 (0)