codekingpro/portable-devtools
115k
1#ifndef Py_CPYTHON_MONITORING_H2# error "this header file must not be included directly"3#endif4 5/* Local events.6 * These require bytecode instrumentation */7 8#define PY_MONITORING_EVENT_PY_START 09#define PY_MONITORING_EVENT_PY_RESUME 110#define PY_MONITORING_EVENT_PY_RETURN 211#define PY_MONITORING_EVENT_PY_YIELD 312#define PY_MONITORING_EVENT_CALL 413#define PY_MONITORING_EVENT_LINE 514#define PY_MONITORING_EVENT_INSTRUCTION 615#define PY_MONITORING_EVENT_JUMP 716#define PY_MONITORING_EVENT_BRANCH_LEFT 817#define PY_MONITORING_EVENT_BRANCH_RIGHT 918#define PY_MONITORING_EVENT_STOP_ITERATION 1019 20#define PY_MONITORING_IS_INSTRUMENTED_EVENT(ev) \21 ((ev) < _PY_MONITORING_LOCAL_EVENTS)22 23/* Other events, mainly exceptions */24 25#define PY_MONITORING_EVENT_RAISE 1126#define PY_MONITORING_EVENT_EXCEPTION_HANDLED 1227#define PY_MONITORING_EVENT_PY_UNWIND 1328#define PY_MONITORING_EVENT_PY_THROW 1429#define PY_MONITORING_EVENT_RERAISE 1530 31 32/* Ancillary events */33 34#define PY_MONITORING_EVENT_C_RETURN 1635#define PY_MONITORING_EVENT_C_RAISE 1736#define PY_MONITORING_EVENT_BRANCH 1837 38 39typedef struct _PyMonitoringState {40 uint8_t active;41 uint8_t opaque;42} PyMonitoringState;43 44 45PyAPI_FUNC(int)46PyMonitoring_EnterScope(PyMonitoringState *state_array, uint64_t *version,47 const uint8_t *event_types, Py_ssize_t length);48 49PyAPI_FUNC(int)50PyMonitoring_ExitScope(void);51 52 53PyAPI_FUNC(int)54_PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);55 56PyAPI_FUNC(int)57_PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);58 59PyAPI_FUNC(int)60_PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,61 PyObject *retval);62 63PyAPI_FUNC(int)64_PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,65 PyObject *retval);66 67PyAPI_FUNC(int)68_PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,69 PyObject* callable, PyObject *arg0);70 71PyAPI_FUNC(int)72_PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,73 int lineno);74 75PyAPI_FUNC(int)76_PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,77 PyObject *target_offset);78 79Py_DEPRECATED(3.14) PyAPI_FUNC(int)80_PyMonitoring_FireBranchEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,81 PyObject *target_offset);82 83PyAPI_FUNC(int)84_PyMonitoring_FireBranchRightEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,85 PyObject *target_offset);86 87PyAPI_FUNC(int)88_PyMonitoring_FireBranchLeftEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,89 PyObject *target_offset);90 91PyAPI_FUNC(int)92_PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,93 PyObject *retval);94 95PyAPI_FUNC(int)96_PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);97 98PyAPI_FUNC(int)99_PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);100 101PyAPI_FUNC(int)102_PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);103 104PyAPI_FUNC(int)105_PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);106 107PyAPI_FUNC(int)108_PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);109 110PyAPI_FUNC(int)111_PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset);112 113PyAPI_FUNC(int)114_PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, PyObject *value);115 116 117#define _PYMONITORING_IF_ACTIVE(STATE, X) \118 if ((STATE)->active) { \119 return (X); \120 } \121 else { \122 return 0; \123 }124 125static inline int126PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)127{128 _PYMONITORING_IF_ACTIVE(129 state,130 _PyMonitoring_FirePyStartEvent(state, codelike, offset));131}132 133static inline int134PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)135{136 _PYMONITORING_IF_ACTIVE(137 state,138 _PyMonitoring_FirePyResumeEvent(state, codelike, offset));139}140 141static inline int142PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,143 PyObject *retval)144{145 _PYMONITORING_IF_ACTIVE(146 state,147 _PyMonitoring_FirePyReturnEvent(state, codelike, offset, retval));148}149 150static inline int151PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,152 PyObject *retval)153{154 _PYMONITORING_IF_ACTIVE(155 state,156 _PyMonitoring_FirePyYieldEvent(state, codelike, offset, retval));157}158 159static inline int160PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,161 PyObject* callable, PyObject *arg0)162{163 _PYMONITORING_IF_ACTIVE(164 state,165 _PyMonitoring_FireCallEvent(state, codelike, offset, callable, arg0));166}167 168static inline int169PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,170 int lineno)171{172 _PYMONITORING_IF_ACTIVE(173 state,174 _PyMonitoring_FireLineEvent(state, codelike, offset, lineno));175}176 177static inline int178PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,179 PyObject *target_offset)180{181 _PYMONITORING_IF_ACTIVE(182 state,183 _PyMonitoring_FireJumpEvent(state, codelike, offset, target_offset));184}185 186static inline int187PyMonitoring_FireBranchRightEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,188 PyObject *target_offset)189{190 _PYMONITORING_IF_ACTIVE(191 state,192 _PyMonitoring_FireBranchRightEvent(state, codelike, offset, target_offset));193}194 195static inline int196PyMonitoring_FireBranchLeftEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,197 PyObject *target_offset)198{199 _PYMONITORING_IF_ACTIVE(200 state,201 _PyMonitoring_FireBranchLeftEvent(state, codelike, offset, target_offset));202}203 204static inline int205PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset,206 PyObject *retval)207{208 _PYMONITORING_IF_ACTIVE(209 state,210 _PyMonitoring_FireCReturnEvent(state, codelike, offset, retval));211}212 213static inline int214PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)215{216 _PYMONITORING_IF_ACTIVE(217 state,218 _PyMonitoring_FirePyThrowEvent(state, codelike, offset));219}220 221static inline int222PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)223{224 _PYMONITORING_IF_ACTIVE(225 state,226 _PyMonitoring_FireRaiseEvent(state, codelike, offset));227}228 229static inline int230PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)231{232 _PYMONITORING_IF_ACTIVE(233 state,234 _PyMonitoring_FireReraiseEvent(state, codelike, offset));235}236 237static inline int238PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)239{240 _PYMONITORING_IF_ACTIVE(241 state,242 _PyMonitoring_FireExceptionHandledEvent(state, codelike, offset));243}244 245static inline int246PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)247{248 _PYMONITORING_IF_ACTIVE(249 state,250 _PyMonitoring_FireCRaiseEvent(state, codelike, offset));251}252 253static inline int254PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset)255{256 _PYMONITORING_IF_ACTIVE(257 state,258 _PyMonitoring_FirePyUnwindEvent(state, codelike, offset));259}260 261static inline int262PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, PyObject *value)263{264 _PYMONITORING_IF_ACTIVE(265 state,266 _PyMonitoring_FireStopIterationEvent(state, codelike, offset, value));267}268 269#undef _PYMONITORING_IF_ACTIVE270 