Home | History | Annotate | Download | only in Include
      1 
      2 /* Function object interface */
      3 #ifndef Py_LIMITED_API
      4 #ifndef Py_FUNCOBJECT_H
      5 #define Py_FUNCOBJECT_H
      6 #ifdef __cplusplus
      7 extern "C" {
      8 #endif
      9 
     10 /* Function objects and code objects should not be confused with each other:
     11  *
     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
     18  * executed so far.
     19  */
     20 
     21 typedef struct {
     22     PyObject_HEAD
     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 */
     34     PyObject *func_qualname;    /* The qualified name */
     35 
     36     /* Invariant:
     37      *     func_closure contains the bindings for func_code->co_freevars, so
     38      *     PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
     39      *     (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
     40      */
     41 } PyFunctionObject;
     42 
     43 PyAPI_DATA(PyTypeObject) PyFunction_Type;
     44 
     45 #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
     46 
     47 PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
     48 PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
     49 PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);
     50 PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
     51 PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
     52 PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
     53 PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
     54 PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
     55 PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
     56 PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
     57 PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
     58 PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
     59 PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
     60 
     61 #ifndef Py_LIMITED_API
     62 PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
     63     PyObject *func,
     64     PyObject **args,
     65     Py_ssize_t nargs,
     66     PyObject *kwargs);
     67 
     68 PyAPI_FUNC(PyObject *) _PyFunction_FastCallKeywords(
     69     PyObject *func,
     70     PyObject **stack,
     71     Py_ssize_t nargs,
     72     PyObject *kwnames);
     73 #endif
     74 
     75 /* Macros for direct access to these values. Type checks are *not*
     76    done, so use with care. */
     77 #define PyFunction_GET_CODE(func) \
     78         (((PyFunctionObject *)func) -> func_code)
     79 #define PyFunction_GET_GLOBALS(func) \
     80 	(((PyFunctionObject *)func) -> func_globals)
     81 #define PyFunction_GET_MODULE(func) \
     82 	(((PyFunctionObject *)func) -> func_module)
     83 #define PyFunction_GET_DEFAULTS(func) \
     84 	(((PyFunctionObject *)func) -> func_defaults)
     85 #define PyFunction_GET_KW_DEFAULTS(func) \
     86 	(((PyFunctionObject *)func) -> func_kwdefaults)
     87 #define PyFunction_GET_CLOSURE(func) \
     88 	(((PyFunctionObject *)func) -> func_closure)
     89 #define PyFunction_GET_ANNOTATIONS(func) \
     90 	(((PyFunctionObject *)func) -> func_annotations)
     91 
     92 /* The classmethod and staticmethod types lives here, too */
     93 PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
     94 PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
     95 
     96 PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
     97 PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
     98 
     99 #ifdef __cplusplus
    100 }
    101 #endif
    102 #endif /* !Py_FUNCOBJECT_H */
    103 #endif /* Py_LIMITED_API */
    104