mirror of
https://github.com/python/cpython.git
synced 2025-11-11 14:44:57 +00:00
Add an exact type match fast path for deque_copy().
This commit is contained in:
parent
ba5747b8bd
commit
e4f3467df1
1 changed files with 16 additions and 0 deletions
|
|
@ -1205,6 +1205,22 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
deque_copy(PyObject *deque)
|
deque_copy(PyObject *deque)
|
||||||
{
|
{
|
||||||
|
if (Py_TYPE(deque) == &deque_type) {
|
||||||
|
dequeobject *new_deque;
|
||||||
|
PyObject *rv;
|
||||||
|
|
||||||
|
new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL);
|
||||||
|
if (new_deque == NULL)
|
||||||
|
return NULL;
|
||||||
|
new_deque->maxlen = ((dequeobject *)deque)->maxlen;
|
||||||
|
rv = deque_extend(new_deque, deque);
|
||||||
|
if (rv != NULL) {
|
||||||
|
Py_DECREF(rv);
|
||||||
|
return (PyObject *)new_deque;
|
||||||
|
}
|
||||||
|
Py_DECREF(new_deque);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (((dequeobject *)deque)->maxlen == -1)
|
if (((dequeobject *)deque)->maxlen == -1)
|
||||||
return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL);
|
return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL);
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue