diff --git a/Zend/zend_observer.h b/Zend/zend_observer.h index f4ade29285db..bcfba35c0658 100644 --- a/Zend/zend_observer.h +++ b/Zend/zend_observer.h @@ -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))) @@ -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); @@ -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; } @@ -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);