[Python-checkins] bpo-41361: Optimized argument parsing for deque_rotate (GH-24796)

rhettinger webhook-mailer at python.org
Tue Mar 16 00:02:34 EDT 2021


https://github.com/python/cpython/commit/448801da96c70699e2ca0798efdfe86d45f37f06
commit: 448801da96c70699e2ca0798efdfe86d45f37f06
branch: master
author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com>
committer: rhettinger <rhettinger at users.noreply.github.com>
date: 2021-03-15T21:02:25-07:00
summary:

bpo-41361: Optimized argument parsing for deque_rotate (GH-24796)

files:
A Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst
M Modules/_collectionsmodule.c

diff --git a/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst b/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst
new file mode 100644
index 0000000000000..19e08f810bb7c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst
@@ -0,0 +1 @@
+:meth:`~collections.deque.rotate` calls are now slightly faster due to faster argument parsing.
\ No newline at end of file
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 90bafb0ea86d9..ca63f710cd864 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -880,9 +880,20 @@ deque_rotate(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs)
 {
     Py_ssize_t n=1;
 
-    if (!_PyArg_ParseStack(args, nargs, "|n:rotate", &n)) {
+    if (!_PyArg_CheckPositional("deque.rotate", nargs, 0, 1)) {
         return NULL;
     }
+    if (nargs) {
+        PyObject *index = _PyNumber_Index(args[0]);
+        if (index == NULL) {
+            return NULL;
+        }
+        n = PyLong_AsSsize_t(index);
+        Py_DECREF(index);
+        if (n == -1 && PyErr_Occurred()) {
+            return NULL;
+        }
+    }
 
     if (!_deque_rotate(deque, n))
         Py_RETURN_NONE;



More information about the Python-checkins mailing list