|
|
|
@ -570,31 +570,23 @@ func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals, |
|
|
|
return (PyObject *)newfunc; |
|
|
|
} |
|
|
|
|
|
|
|
static int |
|
|
|
func_clear(PyFunctionObject *op) |
|
|
|
{ |
|
|
|
Py_CLEAR(op->func_code); |
|
|
|
Py_CLEAR(op->func_globals); |
|
|
|
Py_CLEAR(op->func_module); |
|
|
|
Py_CLEAR(op->func_name); |
|
|
|
Py_CLEAR(op->func_defaults); |
|
|
|
Py_CLEAR(op->func_kwdefaults); |
|
|
|
Py_CLEAR(op->func_doc); |
|
|
|
Py_CLEAR(op->func_dict); |
|
|
|
Py_CLEAR(op->func_closure); |
|
|
|
Py_CLEAR(op->func_annotations); |
|
|
|
Py_CLEAR(op->func_qualname); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
func_dealloc(PyFunctionObject *op) |
|
|
|
{ |
|
|
|
_PyObject_GC_UNTRACK(op); |
|
|
|
if (op->func_weakreflist != NULL) { |
|
|
|
if (op->func_weakreflist != NULL) |
|
|
|
PyObject_ClearWeakRefs((PyObject *) op); |
|
|
|
} |
|
|
|
(void)func_clear(op); |
|
|
|
Py_DECREF(op->func_code); |
|
|
|
Py_DECREF(op->func_globals); |
|
|
|
Py_XDECREF(op->func_module); |
|
|
|
Py_DECREF(op->func_name); |
|
|
|
Py_XDECREF(op->func_defaults); |
|
|
|
Py_XDECREF(op->func_kwdefaults); |
|
|
|
Py_XDECREF(op->func_doc); |
|
|
|
Py_XDECREF(op->func_dict); |
|
|
|
Py_XDECREF(op->func_closure); |
|
|
|
Py_XDECREF(op->func_annotations); |
|
|
|
Py_XDECREF(op->func_qualname); |
|
|
|
PyObject_GC_Del(op); |
|
|
|
} |
|
|
|
|
|
|
|
@ -669,7 +661,7 @@ PyTypeObject PyFunction_Type = { |
|
|
|
Py_TPFLAGS_METHOD_DESCRIPTOR, /* tp_flags */ |
|
|
|
func_new__doc__, /* tp_doc */ |
|
|
|
(traverseproc)func_traverse, /* tp_traverse */ |
|
|
|
(inquiry)func_clear, /* tp_clear */ |
|
|
|
0, /* tp_clear */ |
|
|
|
0, /* tp_richcompare */ |
|
|
|
offsetof(PyFunctionObject, func_weakreflist), /* tp_weaklistoffset */ |
|
|
|
0, /* tp_iter */ |
|
|
|
|