38 const char *
s =
NULL, *e = opcode_names;
41 if (*e ==
' ' || *e ==
',' || *e ==
'\0') {
73 (
EX(opline) >=
EX(
func)->op_array.opcodes &&
EX(opline) <
EX(
func)->op_array.opcodes +
EX(
func)->op_array.last) ||
74 (
EX(opline) >=
EG(exception_op) &&
EX(opline) <
EG(exception_op) + 3));
104 smart_str_appendc(
buf,
':');
106 smart_str_appendl(
buf,
"NULL", 4);
109 smart_str_appendl(
buf,
"object(", 7);
111 smart_str_appendl(
buf,
")#", 2);
137 get_retval_info(
retval, &retval_info);
143 smart_str_free(&retval_info);
151 if (
fbc->common.function_name) {
152 if (
fbc->common.scope) {
174 if (
fbc->common.function_name) {
175 if (
fbc->common.scope) {
183 }
while ((
ex =
ex->prev_execute_data) !=
NULL);
191 observer_show_init(
fbc);
200 }
else if (
fbc->common.function_name) {
216 php_printf(
"<!-- alloc: %p -->\n", initializing);
222 php_printf(
"<!-- destroy: %p -->\n", destroying);
229 php_printf(
"<!-- switching from fiber %p to %p -->\n", from, to);
239 zend_fiber *fiber = zend_fiber_from_context(to);
240 if (fiber->
caller != from) {
267 zend_fiber *fiber = zend_fiber_from_context(from);
291 if (
fbc->common.function_name) {
292 if (
fbc->common.scope) {
301 if (zend_test_prev_execute_internal) {
308static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
318 if ((
func = zend_hash_find_ptr(
EG(function_table), funcname))) {
326 if (new_value &&
ZSTR_LEN(new_value)) {
332 zend_string_release(str);
338 zend_string_release(str);
341 if ((
func = zend_hash_find_ptr(
EG(function_table), funcname))) {
411 zend_test_globals->observer_observe_function_names = malloc(
sizeof(
HashTable));
417 zend_hash_release(zend_test_globals->observer_observe_function_names);
strchr(string $haystack, string $needle, bool $before_needle=false)
zend_ffi_ctype_name_buf buf
PHPAPI size_t php_printf(const char *format,...)
void zend_test_observer_ginit(zend_zend_test_globals *zend_test_globals)
void zend_test_observer_init(INIT_FUNC_ARGS)
void zend_test_observer_gshutdown(zend_zend_test_globals *zend_test_globals)
void declared_function_observer(zend_op_array *op_array, zend_string *name)
void zend_test_observer_shutdown(SHUTDOWN_FUNC_ARGS)
void declared_class_observer(zend_class_entry *ce, zend_string *name)
#define PHP_INI_STAGE_ACTIVATE
#define PHP_INI_STAGE_DEACTIVATE
#define STD_PHP_INI_ENTRY
#define STD_PHP_INI_BOOLEAN
#define PHP_INI_STAGE_SHUTDOWN
#define PHP_INI_STAGE_STARTUP
int observer_observe_functions
int observer_fiber_destroy
int observer_show_return_type
int observer_observe_declaring
int observer_observe_includes
int observer_nesting_depth
int observer_execute_internal
int observer_fiber_switch
int observer_show_return_value
int observer_show_init_backtrace
char * observer_show_opcode_in_user_handler
zend_array * observer_observe_function_names
PHPAPI zend_result php_var_export_ex(zval *struc, int level, smart_str *buf)
zend_fiber_context * caller
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API const char * zend_zval_type_name(const zval *arg)
#define ZEND_USER_CODE(type)
int(* user_opcode_handler_t)(zend_execute_data *execute_data)
struct _zend_op_array zend_op_array
ZEND_API zend_result zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API void(* zend_execute_internal)(zend_execute_data *execute_data, zval *return_value)
#define ZEND_USER_OPCODE_DISPATCH
ZEND_API zend_class_entry * zend_ce_fiber
@ ZEND_FIBER_FLAG_DESTROYED
union _zend_function zend_function
ZEND_API zend_execute_data * zend_generator_check_placeholder_frame(zend_execute_data *ptr)
struct _zend_fiber_context zend_fiber_context
struct _zend_fiber zend_fiber
ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestructor, bool persistent)
ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_STR_KEY(ht, _key)
#define UNREGISTER_INI_ENTRIES()
#define REGISTER_INI_ENTRIES()
#define ZEND_INI_MH(name)
#define ZEND_INI_GET_ADDR()
struct _zend_string zend_string
#define SHUTDOWN_FUNC_ARGS
ZEND_API bool zend_observer_remove_end_handler(zend_function *function, zend_observer_fcall_end_handler end, zend_observer_fcall_end_handler *next)
ZEND_API void zend_observer_fiber_init_register(zend_observer_fiber_init_handler handler)
ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb cb)
ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init)
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_observer_fiber_switch_register(zend_observer_fiber_switch_handler handler)
ZEND_API void zend_observer_add_end_handler(zend_function *function, zend_observer_fcall_end_handler end)
ZEND_API void zend_observer_function_declared_register(zend_observer_function_declared_cb cb)
ZEND_API void zend_observer_fiber_destroy_register(zend_observer_fiber_destroy_handler handler)
ZEND_API void zend_observer_add_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin)
void(* zend_observer_fcall_end_handler)(zend_execute_data *execute_data, zval *retval)
void(* zend_observer_fcall_begin_handler)(zend_execute_data *execute_data)
struct _zend_observer_fcall_handlers zend_observer_fcall_handlers
#define UNEXPECTED(condition)
struct _zend_array zend_array
struct _zend_class_entry zend_class_entry
struct _zend_array HashTable
#define GC_MAKE_PERSISTENT_LOCAL(p)
#define Z_OBJ_HANDLE_P(zval_p)
#define Z_OBJCE_P(zval_p)
struct _zend_execute_data zend_execute_data
fbc internal_function handler(call, ret)
ZEND_API const char *ZEND_FASTCALL zend_get_opcode_name(uint8_t opcode)
ZEND_API uint8_t zend_get_opcode_id(const char *name, size_t length)
#define ZEND_VM_LAST_OPCODE