@@ -523,23 +523,31 @@ func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
523
523
return (PyObject * )newfunc ;
524
524
}
525
525
526
+ static int
527
+ func_clear (PyFunctionObject * op )
528
+ {
529
+ Py_CLEAR (op -> func_code );
530
+ Py_CLEAR (op -> func_globals );
531
+ Py_CLEAR (op -> func_module );
532
+ Py_CLEAR (op -> func_name );
533
+ Py_CLEAR (op -> func_defaults );
534
+ Py_CLEAR (op -> func_kwdefaults );
535
+ Py_CLEAR (op -> func_doc );
536
+ Py_CLEAR (op -> func_dict );
537
+ Py_CLEAR (op -> func_closure );
538
+ Py_CLEAR (op -> func_annotations );
539
+ Py_CLEAR (op -> func_qualname );
540
+ return 0 ;
541
+ }
542
+
526
543
static void
527
544
func_dealloc (PyFunctionObject * op )
528
545
{
529
546
_PyObject_GC_UNTRACK (op );
530
- if (op -> func_weakreflist != NULL )
547
+ if (op -> func_weakreflist != NULL ) {
531
548
PyObject_ClearWeakRefs ((PyObject * ) op );
532
- Py_DECREF (op -> func_code );
533
- Py_DECREF (op -> func_globals );
534
- Py_XDECREF (op -> func_module );
535
- Py_DECREF (op -> func_name );
536
- Py_XDECREF (op -> func_defaults );
537
- Py_XDECREF (op -> func_kwdefaults );
538
- Py_XDECREF (op -> func_doc );
539
- Py_XDECREF (op -> func_dict );
540
- Py_XDECREF (op -> func_closure );
541
- Py_XDECREF (op -> func_annotations );
542
- Py_XDECREF (op -> func_qualname );
549
+ }
550
+ (void )func_clear (op );
543
551
PyObject_GC_Del (op );
544
552
}
545
553
@@ -612,7 +620,7 @@ PyTypeObject PyFunction_Type = {
612
620
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC , /* tp_flags */
613
621
func_new__doc__ , /* tp_doc */
614
622
(traverseproc )func_traverse , /* tp_traverse */
615
- 0 , /* tp_clear */
623
+ ( inquiry ) func_clear , /* tp_clear */
616
624
0 , /* tp_richcompare */
617
625
offsetof(PyFunctionObject , func_weakreflist ), /* tp_weaklistoffset */
618
626
0 , /* tp_iter */
0 commit comments