Skip to content

Commit 448801d

Browse files
authored
bpo-41361: Optimized argument parsing for deque_rotate (GH-24796)
1 parent d69ae75 commit 448801d

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:meth:`~collections.deque.rotate` calls are now slightly faster due to faster argument parsing.

Modules/_collectionsmodule.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,9 +880,20 @@ deque_rotate(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs)
880880
{
881881
Py_ssize_t n=1;
882882

883-
if (!_PyArg_ParseStack(args, nargs, "|n:rotate", &n)) {
883+
if (!_PyArg_CheckPositional("deque.rotate", nargs, 0, 1)) {
884884
return NULL;
885885
}
886+
if (nargs) {
887+
PyObject *index = _PyNumber_Index(args[0]);
888+
if (index == NULL) {
889+
return NULL;
890+
}
891+
n = PyLong_AsSsize_t(index);
892+
Py_DECREF(index);
893+
if (n == -1 && PyErr_Occurred()) {
894+
return NULL;
895+
}
896+
}
886897

887898
if (!_deque_rotate(deque, n))
888899
Py_RETURN_NONE;

0 commit comments

Comments
 (0)