21#ifndef ZEND_OBSERVER_H
22#define ZEND_OBSERVER_H
36#define ZEND_OBSERVER_HANDLE(function) (ZEND_USER_CODE((function)->type) \
37 ? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension)
39#define ZEND_OBSERVER_DATA(function) \
40 ((zend_observer_fcall_begin_handler *)&ZEND_OP_ARRAY_EXTENSION((&(function)->common), ZEND_OBSERVER_HANDLE(function)))
44#define ZEND_OBSERVER_NONE_OBSERVED ((void *) 3)
47#define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1)
49#define ZEND_OBSERVER_FCALL_BEGIN(execute_data) do { \
50 if (ZEND_OBSERVER_ENABLED) { \
51 zend_observer_fcall_begin(execute_data); \
55#define ZEND_OBSERVER_FCALL_END(execute_data, return_value) do { \
56 if (ZEND_OBSERVER_ENABLED) { \
57 zend_observer_fcall_end(execute_data, return_value); \
109 return zend_observer_handler_is_unobserved(*
handler);
156static inline void zend_observer_error_notify(
int type,
zend_string *error_filename, uint32_t error_lineno,
zend_string *message) {
unsigned const char * end
zend_observer_fcall_begin_handler begin
zend_observer_fcall_end_handler end
#define ZEND_ACC_CALL_VIA_TRAMPOLINE
#define ZEND_ACC_GENERATOR
struct _zend_op_array zend_op_array
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
union _zend_function zend_function
struct _zend_fiber_context zend_fiber_context
struct _zend_string zend_string
#define ZEND_MAP_PTR_GET(ptr)
#define ZEND_MAP_PTR(ptr)
bool zend_observer_function_declared_observed
int zend_observer_fcall_op_array_extension
int zend_observer_fcall_internal_function_extension
bool zend_observer_class_linked_observed
bool zend_observer_errors_observed
ZEND_API bool zend_observer_remove_end_handler(zend_function *function, zend_observer_fcall_end_handler end, zend_observer_fcall_end_handler *next)
void(* zend_observer_class_linked_cb)(zend_class_entry *ce, zend_string *name)
ZEND_API void ZEND_FASTCALL zend_observer_fiber_switch_notify(zend_fiber_context *from, zend_fiber_context *to)
ZEND_API void zend_observer_fcall_end_all(void)
ZEND_API void ZEND_FASTCALL zend_observer_fcall_end_prechecked(zend_execute_data *execute_data, zval *return_value)
#define ZEND_OBSERVER_NONE_OBSERVED
ZEND_API void zend_observer_fiber_init_register(zend_observer_fiber_init_handler handler)
ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init)
ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb cb)
void(* zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to)
ZEND_API void zend_observer_shutdown(void)
void(* zend_observer_fiber_init_handler)(zend_fiber_context *initializing)
void(* zend_observer_function_declared_cb)(zend_op_array *op_array, zend_string *name)
ZEND_API void ZEND_FASTCALL zend_observer_fiber_destroy_notify(zend_fiber_context *destroying)
ZEND_API void zend_observer_post_startup(void)
ZEND_API void zend_observer_startup(void)
ZEND_API bool zend_observer_remove_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin, zend_observer_fcall_begin_handler *next)
ZEND_API void ZEND_FASTCALL _zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name)
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin(zend_execute_data *execute_data)
void(* zend_observer_fcall_end_handler)(zend_execute_data *execute_data, zval *retval)
ZEND_API void ZEND_FASTCALL zend_observer_fiber_init_notify(zend_fiber_context *initializing)
ZEND_API void zend_observer_fiber_switch_register(zend_observer_fiber_switch_handler handler)
#define ZEND_OBSERVER_HANDLE(function)
ZEND_API void zend_observer_add_end_handler(zend_function *function, zend_observer_fcall_end_handler end)
ZEND_API void _zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message)
void(* zend_observer_fcall_begin_handler)(zend_execute_data *execute_data)
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin_prechecked(zend_execute_data *execute_data, zend_observer_fcall_begin_handler *observer_data)
void(* zend_observer_error_cb)(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message)
void(* zend_observer_fiber_destroy_handler)(zend_fiber_context *destroying)
ZEND_API void zend_observer_function_declared_register(zend_observer_function_declared_cb cb)
ZEND_API void zend_observer_activate(void)
ZEND_API void zend_observer_error_register(zend_observer_error_cb callback)
zend_observer_fcall_handlers(* zend_observer_fcall_init)(zend_execute_data *execute_data)
ZEND_API void zend_observer_fiber_destroy_register(zend_observer_fiber_destroy_handler handler)
ZEND_API void ZEND_FASTCALL _zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name)
ZEND_API void zend_observer_add_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin)
ZEND_API void ZEND_FASTCALL zend_observer_generator_resume(zend_execute_data *execute_data)
struct _zend_observer_fcall_handlers zend_observer_fcall_handlers
#define zend_always_inline
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_execute_data zend_execute_data
fbc internal_function handler(call, ret)
function(EX_VAR(opline->result.var))