2 /* Function object interface */
4 #ifndef Py_FUNCOBJECT_H
5 #define Py_FUNCOBJECT_H
10 /* Function objects and code objects should not be confused with each other:
12 * Function objects are created by the execution of the 'def' statement.
13 * They reference a code object in their __code__ attribute, which is a
14 * purely syntactic object, i.e. nothing more than a compiled version of some
15 * source code lines. There is one code object per source code "fragment",
16 * but each code object can be referenced by zero or many function objects
17 * depending only on how many times the 'def' statement in the source was
23 PyObject
*func_code
; /* A code object, the __code__ attribute */
24 PyObject
*func_globals
; /* A dictionary (other mappings won't do) */
25 PyObject
*func_defaults
; /* NULL or a tuple */
26 PyObject
*func_kwdefaults
; /* NULL or a dict */
27 PyObject
*func_closure
; /* NULL or a tuple of cell objects */
28 PyObject
*func_doc
; /* The __doc__ attribute, can be anything */
29 PyObject
*func_name
; /* The __name__ attribute, a string object */
30 PyObject
*func_dict
; /* The __dict__ attribute, a dict or NULL */
31 PyObject
*func_weakreflist
; /* List of weak references */
32 PyObject
*func_module
; /* The __module__ attribute, can be anything */
33 PyObject
*func_annotations
; /* Annotations, a dict or NULL */
36 * func_closure contains the bindings for func_code->co_freevars, so
37 * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
38 * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
42 PyAPI_DATA(PyTypeObject
) PyFunction_Type
;
44 #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
46 PyAPI_FUNC(PyObject
*) PyFunction_New(PyObject
*, PyObject
*);
47 PyAPI_FUNC(PyObject
*) PyFunction_GetCode(PyObject
*);
48 PyAPI_FUNC(PyObject
*) PyFunction_GetGlobals(PyObject
*);
49 PyAPI_FUNC(PyObject
*) PyFunction_GetModule(PyObject
*);
50 PyAPI_FUNC(PyObject
*) PyFunction_GetDefaults(PyObject
*);
51 PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject
*, PyObject
*);
52 PyAPI_FUNC(PyObject
*) PyFunction_GetKwDefaults(PyObject
*);
53 PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject
*, PyObject
*);
54 PyAPI_FUNC(PyObject
*) PyFunction_GetClosure(PyObject
*);
55 PyAPI_FUNC(int) PyFunction_SetClosure(PyObject
*, PyObject
*);
56 PyAPI_FUNC(PyObject
*) PyFunction_GetAnnotations(PyObject
*);
57 PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject
*, PyObject
*);
59 /* Macros for direct access to these values. Type checks are *not*
60 done, so use with care. */
61 #define PyFunction_GET_CODE(func) \
62 (((PyFunctionObject *)func) -> func_code)
63 #define PyFunction_GET_GLOBALS(func) \
64 (((PyFunctionObject *)func) -> func_globals)
65 #define PyFunction_GET_MODULE(func) \
66 (((PyFunctionObject *)func) -> func_module)
67 #define PyFunction_GET_DEFAULTS(func) \
68 (((PyFunctionObject *)func) -> func_defaults)
69 #define PyFunction_GET_KW_DEFAULTS(func) \
70 (((PyFunctionObject *)func) -> func_kwdefaults)
71 #define PyFunction_GET_CLOSURE(func) \
72 (((PyFunctionObject *)func) -> func_closure)
73 #define PyFunction_GET_ANNOTATIONS(func) \
74 (((PyFunctionObject *)func) -> func_annotations)
76 /* The classmethod and staticmethod types lives here, too */
77 PyAPI_DATA(PyTypeObject
) PyClassMethod_Type
;
78 PyAPI_DATA(PyTypeObject
) PyStaticMethod_Type
;
80 PyAPI_FUNC(PyObject
*) PyClassMethod_New(PyObject
*);
81 PyAPI_FUNC(PyObject
*) PyStaticMethod_New(PyObject
*);
86 #endif /* !Py_FUNCOBJECT_H */