bpo-33418: Add tp_clear for function object (GH-8058) · python/cpython@3c45240 (original) (raw)
`@@ -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 */
`