@@ -3285,14 +3285,22 @@ _PyDict_FromKeys(PyObject *cls, PyObject *iterable, PyObject *value)
32853285
32863286
32873287 if (PyAnyDict_CheckExact (d )) {
3288- if (PyAnyDict_CheckExact (iterable )) {
3288+ if (PyDict_CheckExact (iterable )) {
32893289 PyDictObject * mp = (PyDictObject * )d ;
32903290
32913291 Py_BEGIN_CRITICAL_SECTION2 (d , iterable );
32923292 d = (PyObject * )dict_dict_fromkeys (mp , iterable , value );
32933293 Py_END_CRITICAL_SECTION2 ();
32943294 return d ;
32953295 }
3296+ else if (PyFrozenDict_CheckExact (iterable )) {
3297+ PyDictObject * mp = (PyDictObject * )d ;
3298+
3299+ Py_BEGIN_CRITICAL_SECTION (d );
3300+ d = (PyObject * )dict_dict_fromkeys (mp , iterable , value );
3301+ Py_END_CRITICAL_SECTION ();
3302+ return d ;
3303+ }
32963304 else if (PyAnySet_CheckExact (iterable )) {
32973305 PyDictObject * mp = (PyDictObject * )d ;
32983306
@@ -3302,14 +3310,37 @@ _PyDict_FromKeys(PyObject *cls, PyObject *iterable, PyObject *value)
33023310 return d ;
33033311 }
33043312 }
3313+ else if (PyFrozenDict_CheckExact (d )) {
3314+ if (PyDict_CheckExact (iterable )) {
3315+ PyDictObject * mp = (PyDictObject * )d ;
3316+
3317+ Py_BEGIN_CRITICAL_SECTION (iterable );
3318+ d = (PyObject * )dict_dict_fromkeys (mp , iterable , value );
3319+ Py_END_CRITICAL_SECTION ();
3320+ return d ;
3321+ }
3322+ else if (PyFrozenDict_CheckExact (iterable )) {
3323+ PyDictObject * mp = (PyDictObject * )d ;
3324+ d = (PyObject * )dict_dict_fromkeys (mp , iterable , value );
3325+ return d ;
3326+ }
3327+ else if (PyAnySet_CheckExact (iterable )) {
3328+ PyDictObject * mp = (PyDictObject * )d ;
3329+
3330+ Py_BEGIN_CRITICAL_SECTION (iterable );
3331+ d = (PyObject * )dict_set_fromkeys (mp , iterable , value );
3332+ Py_END_CRITICAL_SECTION ();
3333+ return d ;
3334+ }
3335+ }
33053336
33063337 it = PyObject_GetIter (iterable );
33073338 if (it == NULL ){
33083339 Py_DECREF (d );
33093340 return NULL ;
33103341 }
33113342
3312- if (PyAnyDict_CheckExact (d )) {
3343+ if (PyDict_CheckExact (d )) {
33133344 Py_BEGIN_CRITICAL_SECTION (d );
33143345 while ((key = PyIter_Next (it )) != NULL ) {
33153346 status = setitem_lock_held ((PyDictObject * )d , key , value );
0 commit comments