| |
|
|
| #ifndef Py_LIMITED_API |
| #ifndef Py_FUNCOBJECT_H |
| #define Py_FUNCOBJECT_H |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
|
|
|
|
| #define _Py_COMMON_FIELDS(PREFIX) \ |
| PyObject *PREFIX ## globals; \ |
| PyObject *PREFIX ## builtins; \ |
| PyObject *PREFIX ## name; \ |
| PyObject *PREFIX ## qualname; \ |
| PyObject *PREFIX ## code; \ |
| PyObject *PREFIX ## defaults; \ |
| PyObject *PREFIX ## kwdefaults; \ |
| PyObject *PREFIX ## closure; |
|
|
| typedef struct { |
| _Py_COMMON_FIELDS(fc_) |
| } PyFrameConstructor; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| typedef struct { |
| PyObject_HEAD |
| _Py_COMMON_FIELDS(func_) |
| PyObject *func_doc; |
| PyObject *func_dict; |
| PyObject *func_weakreflist; |
| PyObject *func_module; |
| PyObject *func_annotations; |
| PyObject *func_typeparams; |
| vectorcallfunc vectorcall; |
| |
| |
| |
| |
| |
| |
| |
| |
| uint32_t func_version; |
|
|
| |
| |
| |
| |
| |
| } PyFunctionObject; |
|
|
| #undef _Py_COMMON_FIELDS |
|
|
| PyAPI_DATA(PyTypeObject) PyFunction_Type; |
|
|
| #define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type) |
|
|
| PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *); |
| PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *); |
| PyAPI_FUNC(void) PyFunction_SetVectorcall(PyFunctionObject *, vectorcallfunc); |
| PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *); |
| PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *); |
| PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *); |
| PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); |
| PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); |
|
|
| #define _PyFunction_CAST(func) \ |
| (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func)) |
|
|
| |
| |
| static inline PyObject* PyFunction_GET_CODE(PyObject *func) { |
| return _PyFunction_CAST(func)->func_code; |
| } |
| #define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_GLOBALS(PyObject *func) { |
| return _PyFunction_CAST(func)->func_globals; |
| } |
| #define PyFunction_GET_GLOBALS(func) PyFunction_GET_GLOBALS(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_MODULE(PyObject *func) { |
| return _PyFunction_CAST(func)->func_module; |
| } |
| #define PyFunction_GET_MODULE(func) PyFunction_GET_MODULE(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_DEFAULTS(PyObject *func) { |
| return _PyFunction_CAST(func)->func_defaults; |
| } |
| #define PyFunction_GET_DEFAULTS(func) PyFunction_GET_DEFAULTS(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_KW_DEFAULTS(PyObject *func) { |
| return _PyFunction_CAST(func)->func_kwdefaults; |
| } |
| #define PyFunction_GET_KW_DEFAULTS(func) PyFunction_GET_KW_DEFAULTS(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_CLOSURE(PyObject *func) { |
| return _PyFunction_CAST(func)->func_closure; |
| } |
| #define PyFunction_GET_CLOSURE(func) PyFunction_GET_CLOSURE(_PyObject_CAST(func)) |
|
|
| static inline PyObject* PyFunction_GET_ANNOTATIONS(PyObject *func) { |
| return _PyFunction_CAST(func)->func_annotations; |
| } |
| #define PyFunction_GET_ANNOTATIONS(func) PyFunction_GET_ANNOTATIONS(_PyObject_CAST(func)) |
|
|
| |
| PyAPI_DATA(PyTypeObject) PyClassMethod_Type; |
| PyAPI_DATA(PyTypeObject) PyStaticMethod_Type; |
|
|
| PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *); |
| PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *); |
|
|
| #define PY_FOREACH_FUNC_EVENT(V) \ |
| V(CREATE) \ |
| V(DESTROY) \ |
| V(MODIFY_CODE) \ |
| V(MODIFY_DEFAULTS) \ |
| V(MODIFY_KWDEFAULTS) |
|
|
| typedef enum { |
| #define PY_DEF_EVENT(EVENT) PyFunction_EVENT_##EVENT, |
| PY_FOREACH_FUNC_EVENT(PY_DEF_EVENT) |
| #undef PY_DEF_EVENT |
| } PyFunction_WatchEvent; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| typedef int (*PyFunction_WatchCallback)( |
| PyFunction_WatchEvent event, |
| PyFunctionObject *func, |
| PyObject *new_value); |
|
|
| |
| |
| |
| |
| |
| |
| |
| PyAPI_FUNC(int) PyFunction_AddWatcher(PyFunction_WatchCallback callback); |
|
|
| |
| |
| |
| |
| |
| PyAPI_FUNC(int) PyFunction_ClearWatcher(int watcher_id); |
|
|
| #ifdef __cplusplus |
| } |
| #endif |
| #endif |
| #endif |
|
|