@@ -146,8 +146,9 @@ static int dict_merge_from_seq2(PyObject *d, PyObject *seq2, int override);
146146
147147/*[clinic input]
148148class dict "PyDictObject *" "&PyDict_Type"
149+ class frozendict "PyFrozenDictObject *" "&PyFrozenDict_Type"
149150[clinic start generated code]*/
150- /*[clinic end generated code: output=da39a3ee5e6b4b0d input=f157a5a0ce9589d6 ]*/
151+ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=5dfa93bac68e7c54 ]*/
151152
152153
153154/*
@@ -4384,7 +4385,23 @@ copy_lock_held(PyObject *o, int as_frozendict)
43844385 return NULL ;
43854386}
43864387
4387- // Similar to PyDict_Copy(), but copy also frozendict.
4388+ PyObject *
4389+ PyDict_Copy (PyObject * o )
4390+ {
4391+ if (o == NULL || !PyDict_Check (o )) {
4392+ PyErr_BadInternalCall ();
4393+ return NULL ;
4394+ }
4395+
4396+ PyObject * res ;
4397+ Py_BEGIN_CRITICAL_SECTION (o );
4398+ res = copy_lock_held (o , 0 );
4399+ Py_END_CRITICAL_SECTION ();
4400+ return res ;
4401+ }
4402+
4403+ // Similar to PyDict_Copy(), but return a frozendict if the argument
4404+ // is a frozendict.
43884405static PyObject *
43894406_PyDict_Copy (PyObject * o )
43904407{
@@ -4397,27 +4414,14 @@ _PyDict_Copy(PyObject *o)
43974414 return res ;
43984415}
43994416
4400- PyObject *
4401- PyDict_Copy (PyObject * o )
4417+ PyObject *
4418+ PyFrozenDict_AsDict (PyObject * o )
44024419{
4403- if (o == NULL || !PyAnyDict_Check (o )) {
4420+ if (o == NULL || !PyFrozenDict_Check (o )) {
44044421 PyErr_BadInternalCall ();
44054422 return NULL ;
44064423 }
44074424
4408- if (PyFrozenDict_CheckExact (o )) {
4409- return Py_NewRef (o );
4410- }
4411-
4412- return _PyDict_Copy (o );
4413- }
4414-
4415- // Similar to PyDict_Copy(), but return a dict if the argument is a frozendict.
4416- PyObject *
4417- _PyDict_CopyAsDict (PyObject * o )
4418- {
4419- assert (PyAnyDict_Check (o ));
4420-
44214425 PyObject * res ;
44224426 Py_BEGIN_CRITICAL_SECTION (o );
44234427 res = copy_lock_held (o , 0 );
@@ -6523,7 +6527,7 @@ dictitems_xor_lock_held(PyObject *d1, PyObject *d2)
65236527 ASSERT_DICT_LOCKED (d1 );
65246528 ASSERT_DICT_LOCKED (d2 );
65256529
6526- PyObject * temp_dict = copy_lock_held (d1 , PyFrozenDict_Check ( d1 ) );
6530+ PyObject * temp_dict = copy_lock_held (d1 , 0 );
65276531 if (temp_dict == NULL ) {
65286532 return NULL ;
65296533 }
@@ -8057,7 +8061,7 @@ static PyMethodDef frozendict_methods[] = {
80578061 DICT_ITEMS_METHODDEF
80588062 DICT_VALUES_METHODDEF
80598063 DICT_FROMKEYS_METHODDEF
8060- DICT_COPY_METHODDEF
8064+ FROZENDICT_COPY_METHODDEF
80618065 DICT___REVERSED___METHODDEF
80628066 {"__class_getitem__ ", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR(" See PEP 585 ")},
80638067 {"__getnewargs__" , frozendict_getnewargs , METH_NOARGS },
@@ -8182,6 +8186,25 @@ PyFrozenDict_New(PyObject *iterable)
81828186 }
81838187}
81848188
8189+ /*[clinic input]
8190+ frozendict.copy
8191+
8192+ Return a shallow copy of the frozendict.
8193+ [clinic start generated code]*/
8194+
8195+ static PyObject *
8196+ frozendict_copy_impl (PyFrozenDictObject * self )
8197+ /*[clinic end generated code: output=e580fd91d9fc2cf7 input=35f6abeaa08fd4bc]*/
8198+ {
8199+ assert (PyFrozenDict_Check (self ));
8200+
8201+ if (PyFrozenDict_CheckExact (self )) {
8202+ return Py_NewRef (self );
8203+ }
8204+
8205+ return _PyDict_Copy ((PyObject * )self );
8206+ }
8207+
81858208
81868209PyTypeObject PyFrozenDict_Type = {
81878210 PyVarObject_HEAD_INIT (& PyType_Type , 0 )
0 commit comments