@@ -1643,11 +1643,16 @@ _methodcaller_initialize_vectorcall(methodcallerobject* mc)
16431643 PyErr_NoMemory ();
16441644 return -1 ;
16451645 }
1646- mc -> vectorcall_args = PySequence_Concat (args , values_tuple );
1647- Py_DECREF (values_tuple );
1648- if (mc -> vectorcall_args == 0 ) {
1649- PyErr_NoMemory ();
1650- return -1 ;
1646+ if (PyTuple_GET_SIZE (args )) {
1647+ mc -> vectorcall_args = PySequence_Concat (args , values_tuple );
1648+ Py_DECREF (values_tuple );
1649+ if (mc -> vectorcall_args == 0 ) {
1650+ PyErr_NoMemory ();
1651+ return -1 ;
1652+ }
1653+ }
1654+ else {
1655+ mc -> vectorcall_args = values_tuple ;
16511656 }
16521657 mc -> vectorcall_kwnames = PySequence_Tuple (kwds );
16531658 if (!mc -> vectorcall_kwnames ) {
@@ -1726,10 +1731,7 @@ methodcaller_clear(methodcallerobject *mc)
17261731 Py_CLEAR (mc -> args );
17271732 Py_CLEAR (mc -> kwds );
17281733 Py_CLEAR (mc -> vectorcall_args );
1729- if (mc -> vectorcall_kwnames ) {
1730- Py_CLEAR (mc -> vectorcall_kwnames );
1731- mc -> vectorcall_kwnames = NULL ;
1732- }
1734+ Py_CLEAR (mc -> vectorcall_kwnames );
17331735}
17341736
17351737static void
@@ -1749,9 +1751,7 @@ methodcaller_traverse(methodcallerobject *mc, visitproc visit, void *arg)
17491751 Py_VISIT (mc -> args );
17501752 Py_VISIT (mc -> kwds );
17511753 Py_VISIT (mc -> vectorcall_args );
1752- if (mc -> vectorcall_kwnames != NULL ) {
1753- Py_VISIT (mc -> vectorcall_kwnames );
1754- }
1754+ Py_VISIT (mc -> vectorcall_kwnames );
17551755 Py_VISIT (Py_TYPE (mc ));
17561756 return 0 ;
17571757}
@@ -1881,7 +1881,7 @@ methodcaller_reduce(methodcallerobject *mc, PyObject *Py_UNUSED(ignored))
18811881 constructor = PyObject_VectorcallDict (partial , newargs , 2 , mc -> kwds );
18821882
18831883 Py_DECREF (partial );
1884- return Py_BuildValue ("NO" , constructor , Py_NewRef ( mc -> args ) );
1884+ return Py_BuildValue ("NO" , constructor , mc -> args );
18851885 }
18861886}
18871887
0 commit comments