symbian-qemu-0.9.1-12/python-win32-2.6.1/include/funcobject.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 */