@@ -2211,19 +2211,19 @@ dict_get(register PyDictObject *mp, PyObject *args)
22112211 return val ;
22122212}
22132213
2214- static PyObject *
2215- dict_setdefault (register PyDictObject * mp , PyObject * args )
2214+ PyObject *
2215+ PyDict_SetDefault ( PyObject * d , PyObject * key , PyObject * defaultobj )
22162216{
2217- PyObject * key ;
2218- PyObject * failobj = Py_None ;
2217+ PyDictObject * mp = (PyDictObject * )d ;
22192218 PyObject * val = NULL ;
22202219 Py_hash_t hash ;
22212220 PyDictKeyEntry * ep ;
22222221 PyObject * * value_addr ;
22232222
2224- if (!PyArg_UnpackTuple (args , "setdefault" , 1 , 2 , & key , & failobj ))
2223+ if (!PyDict_Check (d )) {
2224+ PyErr_BadInternalCall ();
22252225 return NULL ;
2226-
2226+ }
22272227 if (!PyUnicode_CheckExact (key ) ||
22282228 (hash = ((PyASCIIObject * ) key )-> hash ) == -1 ) {
22292229 hash = PyObject_Hash (key );
@@ -2241,20 +2241,32 @@ dict_setdefault(register PyDictObject *mp, PyObject *args)
22412241 return NULL ;
22422242 ep = find_empty_slot (mp , key , hash , & value_addr );
22432243 }
2244- Py_INCREF (failobj );
2244+ Py_INCREF (defaultobj );
22452245 Py_INCREF (key );
2246- MAINTAIN_TRACKING (mp , key , failobj );
2246+ MAINTAIN_TRACKING (mp , key , defaultobj );
22472247 ep -> me_key = key ;
22482248 ep -> me_hash = hash ;
2249- * value_addr = failobj ;
2250- val = failobj ;
2249+ * value_addr = defaultobj ;
2250+ val = defaultobj ;
22512251 mp -> ma_keys -> dk_usable -- ;
22522252 mp -> ma_used ++ ;
22532253 }
2254- Py_INCREF (val );
22552254 return val ;
22562255}
22572256
2257+ static PyObject *
2258+ dict_setdefault (PyDictObject * mp , PyObject * args )
2259+ {
2260+ PyObject * key , * val ;
2261+ PyObject * defaultobj = Py_None ;
2262+
2263+ if (!PyArg_UnpackTuple (args , "setdefault" , 1 , 2 , & key , & defaultobj ))
2264+ return NULL ;
2265+
2266+ val = PyDict_SetDefault (mp , key , defaultobj );
2267+ Py_XINCREF (val );
2268+ return val ;
2269+ }
22582270
22592271static PyObject *
22602272dict_clear (register PyDictObject * mp )
0 commit comments