@@ -2367,9 +2367,9 @@ _PyObject_Call_Prepend(PyObject *func,
23672367}
23682368
23692369PyObject *
2370- _PyStack_AsDict (PyObject * * values , Py_ssize_t nkwargs , PyObject * kwnames ,
2371- PyObject * func )
2370+ _PyStack_AsDict (PyObject * * values , PyObject * kwnames )
23722371{
2372+ Py_ssize_t nkwargs = PyTuple_GET_SIZE (kwnames );
23732373 PyObject * kwdict ;
23742374 Py_ssize_t i ;
23752375
@@ -2378,24 +2378,12 @@ _PyStack_AsDict(PyObject **values, Py_ssize_t nkwargs, PyObject *kwnames,
23782378 return NULL ;
23792379 }
23802380
2381- for (i = 0 ; i < nkwargs ; i ++ ) {
2382- int err ;
2381+ for (i = 0 ; i < nkwargs ; i ++ ) {
23832382 PyObject * key = PyTuple_GET_ITEM (kwnames , i );
23842383 PyObject * value = * values ++ ;
2385-
2386- if (PyDict_GetItem (kwdict , key ) != NULL ) {
2387- PyErr_Format (PyExc_TypeError ,
2388- "%.200s%s got multiple values "
2389- "for keyword argument '%U'" ,
2390- PyEval_GetFuncName (func ),
2391- PyEval_GetFuncDesc (func ),
2392- key );
2393- Py_DECREF (kwdict );
2394- return NULL ;
2395- }
2396-
2397- err = PyDict_SetItem (kwdict , key , value );
2398- if (err ) {
2384+ assert (PyUnicode_CheckExact (key ));
2385+ assert (PyDict_GetItem (kwdict , key ) == NULL );
2386+ if (PyDict_SetItem (kwdict , key , value )) {
23992387 Py_DECREF (kwdict );
24002388 return NULL ;
24012389 }
@@ -2479,7 +2467,7 @@ _PyObject_FastCallKeywords(PyObject *func, PyObject **stack, Py_ssize_t nargs,
24792467 }
24802468
24812469 if (nkwargs > 0 ) {
2482- kwdict = _PyStack_AsDict (stack + nargs , nkwargs , kwnames , func );
2470+ kwdict = _PyStack_AsDict (stack + nargs , kwnames );
24832471 if (kwdict == NULL ) {
24842472 return NULL ;
24852473 }
0 commit comments