@@ -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-
8161static PyObject *
8262range_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
9387static 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 *
188182range_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