vidya7732/AI_Doctor_LLM_GenModel
0
1 2/* Function object interface */3#ifndef Py_LIMITED_API4#ifndef Py_FUNCOBJECT_H5#define Py_FUNCOBJECT_H6#ifdef __cplusplus7extern "C" {8#endif9 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 a14 * purely syntactic object, i.e. nothing more than a compiled version of some15 * 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 objects17 * depending only on how many times the 'def' statement in the source was18 * executed so far.19 */20 21typedef struct {22 PyObject_HEAD23 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 vectorcallfunc vectorcall;36 37 /* Invariant:38 * func_closure contains the bindings for func_code->co_freevars, so39 * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)40 * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).41 */42} PyFunctionObject;43 44PyAPI_DATA(PyTypeObject) PyFunction_Type;45 46#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type)47 48PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);49PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);50PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);51PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);52PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);53PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);54PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);55PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);56PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);57PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);58PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);59PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);60PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);61 62#ifndef Py_LIMITED_API63PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall(64 PyObject *func,65 PyObject *const *stack,66 size_t nargsf,67 PyObject *kwnames);68#endif69 70/* Macros for direct access to these values. Type checks are *not*71 done, so use with care. */72#define PyFunction_GET_CODE(func) \73 (((PyFunctionObject *)func) -> func_code)74#define PyFunction_GET_GLOBALS(func) \75 (((PyFunctionObject *)func) -> func_globals)76#define PyFunction_GET_MODULE(func) \77 (((PyFunctionObject *)func) -> func_module)78#define PyFunction_GET_DEFAULTS(func) \79 (((PyFunctionObject *)func) -> func_defaults)80#define PyFunction_GET_KW_DEFAULTS(func) \81 (((PyFunctionObject *)func) -> func_kwdefaults)82#define PyFunction_GET_CLOSURE(func) \83 (((PyFunctionObject *)func) -> func_closure)84#define PyFunction_GET_ANNOTATIONS(func) \85 (((PyFunctionObject *)func) -> func_annotations)86 87/* The classmethod and staticmethod types lives here, too */88PyAPI_DATA(PyTypeObject) PyClassMethod_Type;89PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;90 91PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);92PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);93 94#ifdef __cplusplus95}96#endif97#endif /* !Py_FUNCOBJECT_H */98#endif /* Py_LIMITED_API */99 