@@ -680,49 +680,6 @@ func_set_qualname(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
680680 return 0 ;
681681}
682682
683- static PyObject *
684- func_get_kwdefaults (PyObject * self , void * Py_UNUSED (ignored ))
685- {
686- PyFunctionObject * op = _PyFunction_CAST (self );
687- if (PySys_Audit ("object.__getattr__" , "Os" ,
688- op , "__kwdefaults__" ) < 0 ) {
689- return NULL ;
690- }
691- if (op -> func_kwdefaults == NULL ) {
692- Py_RETURN_NONE ;
693- }
694- return Py_NewRef (op -> func_kwdefaults );
695- }
696-
697- static int
698- func_set_kwdefaults (PyObject * self , PyObject * value , void * Py_UNUSED (ignored ))
699- {
700- PyFunctionObject * op = _PyFunction_CAST (self );
701- if (value == Py_None )
702- value = NULL ;
703- /* Legal to del f.func_kwdefaults.
704- * Can only set func_kwdefaults to NULL or a dict. */
705- if (value != NULL && !PyDict_Check (value )) {
706- PyErr_SetString (PyExc_TypeError ,
707- "__kwdefaults__ must be set to a dict object" );
708- return -1 ;
709- }
710- if (value ) {
711- if (PySys_Audit ("object.__setattr__" , "OsO" ,
712- op , "__kwdefaults__" , value ) < 0 ) {
713- return -1 ;
714- }
715- } else if (PySys_Audit ("object.__delattr__" , "Os" ,
716- op , "__kwdefaults__" ) < 0 ) {
717- return -1 ;
718- }
719-
720- handle_func_event (PyFunction_EVENT_MODIFY_KWDEFAULTS , op , value );
721- _PyFunction_ClearVersion (op );
722- Py_XSETREF (op -> func_kwdefaults , Py_XNewRef (value ));
723- return 0 ;
724- }
725-
726683static PyObject *
727684func_get_annotate (PyObject * self , void * Py_UNUSED (ignored ))
728685{
@@ -1036,12 +993,12 @@ function___code___set_impl(PyFunctionObject *self, PyObject *value)
1036993@getter
1037994function.__defaults__
1038995
1039- Get function arguments with default values
996+ Get positional arguments with default values for a function.
1040997[clinic start generated code]*/
1041998
1042999static PyObject *
10431000function___defaults___get_impl (PyFunctionObject * self )
1044- /*[clinic end generated code: output=e3da51b321d94a7a input=08ee98381f3099e7 ]*/
1001+ /*[clinic end generated code: output=e3da51b321d94a7a input=179dc99d1b7f07b8 ]*/
10451002{
10461003 if (PySys_Audit ("object.__getattr__" , "Os" , self , "__defaults__" ) < 0 ) {
10471004 return NULL ;
@@ -1087,10 +1044,67 @@ function___defaults___set_impl(PyFunctionObject *self, PyObject *value)
10871044 return 0 ;
10881045}
10891046
1047+ /*[clinic input]
1048+ @critical_section
1049+ @getter
1050+ function.__kwdefaults__
1051+
1052+ Get keyword arguments with default values for a function.
1053+ [clinic start generated code]*/
1054+
1055+ static PyObject *
1056+ function___kwdefaults___get_impl (PyFunctionObject * self )
1057+ /*[clinic end generated code: output=e8218444acb1f699 input=59111109efd0d68b]*/
1058+ {
1059+ if (PySys_Audit ("object.__getattr__" , "Os" ,
1060+ self , "__kwdefaults__" ) < 0 ) {
1061+ return NULL ;
1062+ }
1063+ if (self -> func_kwdefaults == NULL ) {
1064+ Py_RETURN_NONE ;
1065+ }
1066+ return Py_NewRef (self -> func_kwdefaults );
1067+ }
1068+
1069+ /*[clinic input]
1070+ @critical_section
1071+ @setter
1072+ function.__kwdefaults__
1073+ [clinic start generated code]*/
1074+
1075+ static int
1076+ function___kwdefaults___set_impl (PyFunctionObject * self , PyObject * value )
1077+ /*[clinic end generated code: output=83b577938befcbf5 input=bea7f945934013dd]*/
1078+ {
1079+ if (value == Py_None )
1080+ value = NULL ;
1081+ /* Legal to del f.func_kwdefaults.
1082+ * Can only set func_kwdefaults to NULL or a dict. */
1083+ if (value != NULL && !PyDict_Check (value )) {
1084+ PyErr_SetString (PyExc_TypeError ,
1085+ "__kwdefaults__ must be set to a dict object" );
1086+ return -1 ;
1087+ }
1088+ if (value ) {
1089+ if (PySys_Audit ("object.__setattr__" , "OsO" ,
1090+ self , "__kwdefaults__" , value ) < 0 ) {
1091+ return -1 ;
1092+ }
1093+ } else if (PySys_Audit ("object.__delattr__" , "Os" ,
1094+ self , "__kwdefaults__" ) < 0 ) {
1095+ return -1 ;
1096+ }
1097+
1098+ handle_func_event (PyFunction_EVENT_MODIFY_KWDEFAULTS , self , value );
1099+ _PyFunction_ClearVersion (self );
1100+ Py_XSETREF (self -> func_kwdefaults , Py_XNewRef (value ));
1101+ return 0 ;
1102+ }
1103+
10901104static PyGetSetDef func_getsetlist [] = {
10911105 FUNCTION___CODE___GETSETDEF
10921106 FUNCTION___DEFAULTS___GETSETDEF
1093- { "__kwdefaults__" , func_get_kwdefaults , func_set_kwdefaults },
1107+ FUNCTION___KWDEFAULTS___GETSETDEF
10941108 FUNCTION___ANNOTATIONS___GETSETDEF
10951109 {"__annotate__" , func_get_annotate , func_set_annotate },
10961110 {"__dict__" , PyObject_GenericGetDict , PyObject_GenericSetDict },
0 commit comments