@@ -246,6 +246,7 @@ PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)
246
246
#define OFF (x ) offsetof(PyFunctionObject, x)
247
247
248
248
static PyMemberDef func_memberlist [] = {
249
+ {"__closure__" , T_OBJECT , OFF (func_descr .closure ), READONLY },
249
250
{"__doc__" , T_OBJECT , OFF (func_doc ), 0 },
250
251
{"__globals__" , T_OBJECT , OFF (func_descr .globals ), READONLY },
251
252
{"__module__" , T_OBJECT , OFF (func_module ), 0 },
@@ -263,19 +264,6 @@ func_get_code(PyFunctionObject *op, void *Py_UNUSED(ignored))
263
264
return op -> func_descr .code ;
264
265
}
265
266
266
- static PyObject *
267
- func_get_closure (PyFunctionObject * op , void * Py_UNUSED (ignored ))
268
- {
269
- if (PySys_Audit ("object.__getattr__" , "Os" , op , "__closure__" ) < 0 ) {
270
- return NULL ;
271
- }
272
- if (op -> func_descr .closure == NULL ) {
273
- Py_RETURN_NONE ;
274
- }
275
- Py_INCREF (op -> func_descr .closure );
276
- return op -> func_descr .closure ;
277
- }
278
-
279
267
static int
280
268
func_set_code (PyFunctionObject * op , PyObject * value , void * Py_UNUSED (ignored ))
281
269
{
@@ -485,7 +473,6 @@ func_set_annotations(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(igno
485
473
}
486
474
487
475
static PyGetSetDef func_getsetlist [] = {
488
- {"__closure__" , (getter )func_get_closure , NULL },
489
476
{"__code__" , (getter )func_get_code , (setter )func_set_code },
490
477
{"__defaults__" , (getter )func_get_defaults ,
491
478
(setter )func_set_defaults },
0 commit comments