8000 Factor-out two substantially identical code blocks. (GH-8219) · python/cpython@66953f0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 66953f0

Browse files
authored
Factor-out two substantially identical code blocks. (GH-8219)
1 parent 6b490b5 commit 66953f0

File tree

1 file changed

+10
-46
lines changed

1 file changed

+10
-46
lines changed

Modules/_collectionsmodule.c

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element.");
264264

265265
#define NEEDS_TRIM(deque, maxlen) ((size_t)(maxlen) < (size_t)(Py_SIZE(deque)))
266266

267-
static int
267+
static inline int
268268
deque_append_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen)
269269
{
270270
if (deque->rightindex == BLOCKLEN - 1) {
@@ -301,7 +301,7 @@ deque_append(dequeobject *deque, PyObject *item)
301301

302302
PyDoc_STRVAR(append_doc, "Add an element to the right side of the deque.");
303303

304-
static int
304+
static inline int
305305
deque_appendleft_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen)
306306
{
307307
if (deque->leftindex == 0) {
@@ -403,28 +403,10 @@ deque_extend(dequeobject *deque, PyObject *iterable)
403403

404404
iternext = *Py_TYPE(it)->tp_iternext;
405405
while ((item = iternext(it)) != NULL) {
406-
if (deque->rightindex == BLOCKLEN - 1) {
407-
block *b = newblock();
408-
if (b == NULL) {
409-
Py_DECREF(item);
410-
Py_DECREF(it);
411-
return NULL;
412-
}
413-
b->leftlink = deque->rightblock;
414-
CHECK_END(deque->rightblock->rightlink);
415-
deque->rightblock->rightlink = b;
416-
deque->rightblock = b;
417-
MARK_END(b->rightlink);
418-
deque->rightindex = -1;
419-
}
420-
Py_SIZE(deque)++;
421-
deque->rightindex++;
422-
deque->rightblock->data[deque->rightindex] = item;
423-
if (NEEDS_TRIM(deque, maxlen)) {
424-
PyObject *olditem = deque_popleft(deque, NULL);
425-
Py_DECREF(olditem);
426-
} else {
427-
deque->state++;
406+
if (deque_append_internal(deque, item, maxlen) == -1) {
407+
Py_DECREF(item);
408+
Py_DECREF(it);
409+
return NULL;
428410
}
429411
}
430412
return finalize_iterator(it);
@@ -468,28 +450,10 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
468450

469451
iternext = *Py_TYPE(it)->tp_iternext;
470452
while ((item = iternext(it)) != NULL) {
471-
if (deque->leftindex == 0) {
472-
block *b = newblock();
473-
if (b == NULL) {
474-
Py_DECREF(item);
475-
Py_DECREF(it);
476-
return NULL;
477-
}
478-
b->rightlink = deque->leftblock;
479-
CHECK_END(deque->leftblock->leftlink);
480-
deque->leftblock->leftlink = b;
481-
deque->leftblock = b;
482-
MARK_END(b->leftlink);
483-
deque->leftindex = BLOCKLEN;
484-
}
485-
Py_SIZE(deque)++;
486-
deque->leftindex--;
487-
deque->leftblock->data[deque->leftindex] = item;
488-
if (NEEDS_TRIM(deque, maxlen)) {
489-
PyObject *olditem = deque_pop(deque, NULL);
490-
Py_DECREF(olditem);
491-
} else {
492-
deque->state++;
453+
if (deque_appendleft_internal(deque, item, maxlen) == -1) {
454+
Py_DECREF(item);
455+
Py_DECREF(it);
456+
return NULL;
493457
}
494458
}
495459
return finalize_iterator(it);

0 commit comments

Comments
 (0)
0