Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 15 additions & 14 deletions Zend/zend_observer.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ extern ZEND_API bool zend_observer_errors_observed;
extern ZEND_API bool zend_observer_function_declared_observed;
extern ZEND_API bool zend_observer_class_linked_observed;

#define ZEND_OBSERVER_HANDLE(function) (ZEND_USER_CODE((function)->type) \
? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension)
static zend_always_inline int ZEND_OBSERVER_HANDLE(const zend_function *function) {
return ZEND_USER_CODE(function->common.type) ? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension;
}

#define ZEND_OBSERVER_DATA(function) \
((zend_observer_fcall_begin_handler *)&ZEND_OP_ARRAY_EXTENSION((&(function)->common), ZEND_OBSERVER_HANDLE(function)))
Expand All @@ -45,18 +46,6 @@ extern ZEND_API bool zend_observer_class_linked_observed;
/* Omit zend_observer_fcall_internal_function_extension check, they are set at the same time. */
#define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1)

#define ZEND_OBSERVER_FCALL_BEGIN(execute_data) do { \
if (ZEND_OBSERVER_ENABLED) { \
zend_observer_fcall_begin(execute_data); \
} \
} while (0)

#define ZEND_OBSERVER_FCALL_END(execute_data, return_value) do { \
if (ZEND_OBSERVER_ENABLED) { \
zend_observer_fcall_end(execute_data, return_value); \
} \
} while (0)

typedef void (*zend_observer_fcall_begin_handler)(zend_execute_data *execute_data);
typedef void (*zend_observer_fcall_end_handler)(zend_execute_data *execute_data, zval *retval);

Expand Down Expand Up @@ -87,6 +76,12 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin(zend_execute_data *execute
/* prechecked: the call is actually observed. */
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin_prechecked(zend_execute_data *execute_data, zend_observer_fcall_begin_handler *observer_data);

static zend_always_inline void ZEND_OBSERVER_FCALL_BEGIN(zend_execute_data *execute_data) {
if (ZEND_OBSERVER_ENABLED) {
zend_observer_fcall_begin(execute_data);
}
}

static zend_always_inline bool zend_observer_handler_is_unobserved(const zend_observer_fcall_begin_handler *handler) {
return *handler == ZEND_OBSERVER_NONE_OBSERVED;
}
Expand Down Expand Up @@ -126,6 +121,12 @@ static zend_always_inline void zend_observer_fcall_end(zend_execute_data *execut
}
}

static zend_always_inline void ZEND_OBSERVER_FCALL_END(zend_execute_data *execute_data, zval *return_value) {
if (ZEND_OBSERVER_ENABLED) {
zend_observer_fcall_end(execute_data, return_value);
}
}

ZEND_API void zend_observer_fcall_end_all(void);

typedef void (*zend_observer_function_declared_cb)(zend_op_array *op_array, zend_string *name);
Expand Down
Loading