@@ -310,17 +310,14 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
310310PyDoc_STRVAR (extendleft_doc ,
311311"Extend the left side of the deque with elements from the iterable" );
312312
313- static PyObject *
314- deque_rotate (dequeobject * deque , PyObject * args )
313+ static int
314+ _deque_rotate (dequeobject * deque , int n )
315315{
316- int i , n = 1 , len = deque -> len , halflen = (len + 1 )>>1 ;
316+ int i , len = deque -> len , halflen = (len + 1 )>>1 ;
317317 PyObject * item , * rv ;
318318
319- if (!PyArg_ParseTuple (args , "|i:rotate" , & n ))
320- return NULL ;
321-
322319 if (len == 0 )
323- Py_RETURN_NONE ;
320+ return 0 ;
324321 if (n > halflen || n < - halflen ) {
325322 n %= len ;
326323 if (n > halflen )
@@ -335,7 +332,7 @@ deque_rotate(dequeobject *deque, PyObject *args)
335332 rv = deque_appendleft (deque , item );
336333 Py_DECREF (item );
337334 if (rv == NULL )
338- return NULL ;
335+ return -1 ;
339336 Py_DECREF (rv );
340337 }
341338 for (i = 0 ; i > n ; i -- ) {
@@ -344,10 +341,22 @@ deque_rotate(dequeobject *deque, PyObject *args)
344341 rv = deque_append (deque , item );
345342 Py_DECREF (item );
346343 if (rv == NULL )
347- return NULL ;
344+ return -1 ;
348345 Py_DECREF (rv );
349346 }
350- Py_RETURN_NONE ;
347+ return 0 ;
348+ }
349+
350+ static PyObject *
351+ deque_rotate (dequeobject * deque , PyObject * args )
352+ {
353+ int n = 1 ;
354+
355+ if (!PyArg_ParseTuple (args , "|i:rotate" , & n ))
356+ return NULL ;
357+ if (_deque_rotate (deque , n ) == 0 )
358+ Py_RETURN_NONE ;
359+ return NULL ;
351360}
352361
353362PyDoc_STRVAR (rotate_doc ,
@@ -424,38 +433,17 @@ deque_item(dequeobject *deque, int i)
424433static int
425434deque_del_item (dequeobject * deque , int i )
426435{
427- PyObject * item = NULL , * minus_i = NULL , * plus_i = NULL ;
428- int rv = -1 ;
436+ PyObject * item ;
429437
430438 assert (i >= 0 && i < deque -> len );
431-
432- minus_i = Py_BuildValue ("(i)" , - i );
433- if (minus_i == NULL )
434- goto fail ;
435-
436- plus_i = Py_BuildValue ("(i)" , i );
437- if (plus_i == NULL )
438- goto fail ;
439-
440- item = deque_rotate (deque , minus_i );
441- if (item == NULL )
442- goto fail ;
443- Py_DECREF (item );
439+ if (_deque_rotate (deque , - i ) == -1 )
440+ return -1 ;
444441
445442 item = deque_popleft (deque , NULL );
446443 assert (item != NULL );
447444 Py_DECREF (item );
448445
449- item = deque_rotate (deque , plus_i );
450- if (item == NULL )
451- goto fail ;
452-
453- rv = 0 ;
454- fail :
455- Py_XDECREF (item );
456- Py_XDECREF (minus_i );
457- Py_XDECREF (plus_i );
458- return rv ;
446+ return _deque_rotate (deque , i );
459447}
460448
461449static int
0 commit comments