[Python-checkins] cpython: Add an exact type match fast path for deque_copy().

raymond.hettinger python-checkins at python.org
Mon Sep 14 01:27:07 CEST 2015


https://hg.python.org/cpython/rev/9296469dcaed
changeset:   97998:9296469dcaed
user:        Raymond Hettinger <python at rcn.com>
date:        Sun Sep 13 19:27:01 2015 -0400
summary:
  Add an exact type match fast path for deque_copy().

files:
  Modules/_collectionsmodule.c |  16 ++++++++++++++++
  1 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -1205,6 +1205,22 @@
 static PyObject *
 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)
         return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL);
     else

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list