]> granicus.if.org Git - python/commitdiff
Only update the state variable once per iteration.
authorRaymond Hettinger <python@rcn.com>
Tue, 20 Oct 2015 07:03:33 +0000 (00:03 -0700)
committerRaymond Hettinger <python@rcn.com>
Tue, 20 Oct 2015 07:03:33 +0000 (00:03 -0700)
Modules/_collectionsmodule.c

index ceba0376ed140fe2f4a61070b0c9e897696a463e..aa879beff84ef7de6d41c75646ce22ea161d6788 100644 (file)
@@ -269,7 +269,6 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element.");
 static PyObject *
 deque_append(dequeobject *deque, PyObject *item)
 {
-    deque->state++;
     if (deque->rightindex == BLOCKLEN - 1) {
         block *b = newblock(Py_SIZE(deque));
         if (b == NULL)
@@ -288,6 +287,8 @@ deque_append(dequeobject *deque, PyObject *item)
     if (NEEDS_TRIM(deque, deque->maxlen)) {
         PyObject *olditem = deque_popleft(deque, NULL);
         Py_DECREF(olditem);
+    } else {
+        deque->state++;
     }
     Py_RETURN_NONE;
 }
@@ -297,7 +298,6 @@ PyDoc_STRVAR(append_doc, "Add an element to the right side of the deque.");
 static PyObject *
 deque_appendleft(dequeobject *deque, PyObject *item)
 {
-    deque->state++;
     if (deque->leftindex == 0) {
         block *b = newblock(Py_SIZE(deque));
         if (b == NULL)
@@ -316,6 +316,8 @@ deque_appendleft(dequeobject *deque, PyObject *item)
     if (NEEDS_TRIM(deque, deque->maxlen)) {
         PyObject *olditem = deque_pop(deque, NULL);
         Py_DECREF(olditem);
+    } else {
+        deque->state++;
     }
     Py_RETURN_NONE;
 }
@@ -387,7 +389,6 @@ deque_extend(dequeobject *deque, PyObject *iterable)
 
     iternext = *Py_TYPE(it)->tp_iternext;
     while ((item = iternext(it)) != NULL) {
-        deque->state++;
         if (deque->rightindex == BLOCKLEN - 1) {
             block *b = newblock(Py_SIZE(deque));
             if (b == NULL) {
@@ -408,6 +409,8 @@ deque_extend(dequeobject *deque, PyObject *iterable)
         if (NEEDS_TRIM(deque, maxlen)) {
             PyObject *olditem = deque_popleft(deque, NULL);
             Py_DECREF(olditem);
+        } else {
+            deque->state++;
         }
     }
     return finalize_iterator(it);
@@ -451,7 +454,6 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
 
     iternext = *Py_TYPE(it)->tp_iternext;
     while ((item = iternext(it)) != NULL) {
-        deque->state++;
         if (deque->leftindex == 0) {
             block *b = newblock(Py_SIZE(deque));
             if (b == NULL) {
@@ -472,6 +474,8 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
         if (NEEDS_TRIM(deque, maxlen)) {
             PyObject *olditem = deque_pop(deque, NULL);
             Py_DECREF(olditem);
+        } else {
+            deque->state++;
         }
     }
     return finalize_iterator(it);