Home | History | Annotate | Download | only in python2.7
      1 
      2 /* Function object interface */
      3 
      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 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
     18  * executed so far.
     19  */
     20 
     21 typedef struct {
     22     PyObject_HEAD
     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 */
     32 
     33     /* Invariant:
     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).
     37      */
     38 } PyFunctionObject;
     39 
     40 PyAPI_DATA(PyTypeObject) PyFunction_Type;
     41 
     42 #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
     43 
     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 *);
     52 
     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)
     65 
     66 /* The classmethod and staticmethod types lives here, too */
     67 PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
     68 PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
     69 
     70 PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
     71 PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
     72 
     73 #ifdef __cplusplus
     74 }
     75 #endif
     76 #endif /* !Py_FUNCOBJECT_H */
     77