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 func_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 */
24 PyObject
*func_globals
; /* A dictionary (other mappings won't do) */
25 PyObject
*func_defaults
; /* NULL or a tuple */
26 PyObject
*func_closure
; /* NULL or a tuple of cell objects */
27 PyObject
*func_doc
; /* The __doc__ attribute, can be anything */
28 PyObject
*func_name
; /* The __name__ attribute, a string object */
29 PyObject
*func_dict
; /* The __dict__ attribute, a dict or NULL */
30 PyObject
*func_weakreflist
; /* List of weak references */
31 PyObject
*func_module
; /* The __module__ attribute, can be anything */
34 * func_closure contains the bindings for func_code->co_freevars, so
35 * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
36 * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
40 PyAPI_DATA(PyTypeObject
) PyFunction_Type
;
42 #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
44 PyAPI_FUNC(PyObject
*) PyFunction_New(PyObject
*, PyObject
*);
45 PyAPI_FUNC(PyObject
*) PyFunction_GetCode(PyObject
*);
46 PyAPI_FUNC(PyObject
*) PyFunction_GetGlobals(PyObject
*);
47 PyAPI_FUNC(PyObject
*) PyFunction_GetModule(PyObject
*);
48 PyAPI_FUNC(PyObject
*) PyFunction_GetDefaults(PyObject
*);
49 PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject
*, PyObject
*);
50 PyAPI_FUNC(PyObject
*) PyFunction_GetClosure(PyObject
*);
51 PyAPI_FUNC(int) PyFunction_SetClosure(PyObject
*, PyObject
*);
53 /* Macros for direct access to these values. Type checks are *not*
54 done, so use with care. */
55 #define PyFunction_GET_CODE(func) \
56 (((PyFunctionObject *)func) -> func_code)
57 #define PyFunction_GET_GLOBALS(func) \
58 (((PyFunctionObject *)func) -> func_globals)
59 #define PyFunction_GET_MODULE(func) \
60 (((PyFunctionObject *)func) -> func_module)
61 #define PyFunction_GET_DEFAULTS(func) \
62 (((PyFunctionObject *)func) -> func_defaults)
63 #define PyFunction_GET_CLOSURE(func) \
64 (((PyFunctionObject *)func) -> func_closure)
66 /* The classmethod and staticmethod types lives here, too */
67 PyAPI_DATA(PyTypeObject
) PyClassMethod_Type
;
68 PyAPI_DATA(PyTypeObject
) PyStaticMethod_Type
;
70 PyAPI_FUNC(PyObject
*) PyClassMethod_New(PyObject
*);
71 PyAPI_FUNC(PyObject
*) PyStaticMethod_New(PyObject
*);
76 #endif /* !Py_FUNCOBJECT_H */