watch              94 sapi/phpdbg/phpdbg_prompt.c 	PHPDBG_COMMAND_D(watch,   "set watchpoint",                           'w', phpdbg_watch_commands, "|ss", 0),
watch            1326 sapi/phpdbg/phpdbg_prompt.c PHPDBG_COMMAND(watch) /* {{{ */
watch              58 sapi/phpdbg/phpdbg_prompt.h PHPDBG_COMMAND(watch);
watch              97 sapi/phpdbg/phpdbg_watch.c #define HT_WATCH_HT(watch) HT_PTR_HT((watch)->addr.ptr)
watch             111 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch;
watch             118 sapi/phpdbg/phpdbg_watch.c 	watch = result->ptr;
watch             121 sapi/phpdbg/phpdbg_watch.c 	if ((char *) phpdbg_get_page_boundary(watch->addr.ptr) > (char *) addr || (char *) phpdbg_get_page_boundary(watch->addr.ptr) + phpdbg_get_total_page_size(watch->addr.ptr, watch->size) < (char *) addr) {
watch             126 sapi/phpdbg/phpdbg_watch.c 	return watch;
watch             129 sapi/phpdbg/phpdbg_watch.c static void phpdbg_change_watchpoint_access(phpdbg_watchpoint_t *watch, int access) {
watch             131 sapi/phpdbg/phpdbg_watch.c 	mprotect(phpdbg_get_page_boundary(watch->addr.ptr), phpdbg_get_total_page_size(watch->addr.ptr, watch->size), access);
watch             134 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_activate_watchpoint(phpdbg_watchpoint_t *watch) {
watch             135 sapi/phpdbg/phpdbg_watch.c 	phpdbg_change_watchpoint_access(watch, PROT_READ);
watch             138 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_deactivate_watchpoint(phpdbg_watchpoint_t *watch) {
watch             139 sapi/phpdbg/phpdbg_watch.c 	phpdbg_change_watchpoint_access(watch, PROT_READ | PROT_WRITE);
watch             142 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_store_watchpoint(phpdbg_watchpoint_t *watch) {
watch             143 sapi/phpdbg/phpdbg_watch.c 	phpdbg_btree_insert(&PHPDBG_G(watchpoint_tree), (zend_ulong) watch->addr.ptr, watch);
watch             146 sapi/phpdbg/phpdbg_watch.c static inline void phpdbg_remove_watchpoint(phpdbg_watchpoint_t *watch) {
watch             147 sapi/phpdbg/phpdbg_watch.c 	phpdbg_btree_delete(&PHPDBG_G(watchpoint_tree), (zend_ulong) watch->addr.ptr);
watch             150 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_addr_watchpoint(void *addr, size_t size, phpdbg_watchpoint_t *watch) {
watch             151 sapi/phpdbg/phpdbg_watch.c 	watch->addr.ptr = addr;
watch             152 sapi/phpdbg/phpdbg_watch.c 	watch->size = size;
watch             155 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_zval_watchpoint(zval *zv, phpdbg_watchpoint_t *watch) {
watch             156 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_addr_watchpoint(zv, sizeof(zval), watch);
watch             157 sapi/phpdbg/phpdbg_watch.c 	watch->type = WATCH_ON_ZVAL;
watch             160 sapi/phpdbg/phpdbg_watch.c void phpdbg_create_ht_watchpoint(HashTable *ht, phpdbg_watchpoint_t *watch) {
watch             161 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_addr_watchpoint(((char *) ht) + HT_WATCH_OFFSET, sizeof(HashTable) - HT_WATCH_OFFSET, watch);
watch             162 sapi/phpdbg/phpdbg_watch.c 	watch->type = WATCH_ON_HASHTABLE;
watch             163 sapi/phpdbg/phpdbg_watch.c 	watch->implicit_ht_count = 0;
watch             166 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_ht_watch(phpdbg_watchpoint_t *watch);
watch             167 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_zval_watch(phpdbg_watchpoint_t *watch);
watch             171 sapi/phpdbg/phpdbg_watch.c static void phpdbg_free_watch(phpdbg_watchpoint_t *watch) {
watch             172 sapi/phpdbg/phpdbg_watch.c 	zend_string_release(watch->str);
watch             173 sapi/phpdbg/phpdbg_watch.c 	zend_string_release(watch->name_in_parent);
watch             177 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_ht_watchpoints_recursive(phpdbg_watchpoint_t *watch);
watch             178 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_zval_watchpoints_recursive(phpdbg_watchpoint_t *watch);
watch             179 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_watchpoints_recursive(phpdbg_watchpoint_t *watch);
watch             183 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t));
watch             184 sapi/phpdbg/phpdbg_watch.c 	watch->flags = parent->flags;
watch             185 sapi/phpdbg/phpdbg_watch.c 	watch->parent = parent;
watch             186 sapi/phpdbg/phpdbg_watch.c 	watch->str = parent->str;
watch             188 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_addr_watchpoint(&GC_REFCOUNT(ref), sizeof(uint32_t), watch);
watch             189 sapi/phpdbg/phpdbg_watch.c 	watch->type = WATCH_ON_REFCOUNTED;
watch             191 sapi/phpdbg/phpdbg_watch.c 	return watch;
watch             195 sapi/phpdbg/phpdbg_watch.c static void phpdbg_add_watch_collision(phpdbg_watchpoint_t *watch) {
watch             199 sapi/phpdbg/phpdbg_watch.c 	ZEND_ASSERT(((watch->flags & PHPDBG_WATCH_RECURSIVE) == 0) ^ ((watch->flags & (PHPDBG_WATCH_IMPLICIT | PHPDBG_WATCH_SIMPLE)) == 0));
watch             201 sapi/phpdbg/phpdbg_watch.c 	if ((cur = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->addr.ref))) {
watch             204 sapi/phpdbg/phpdbg_watch.c 		if ((old = zend_hash_find_ptr(&cur->watches, watch->str)) || (old = zend_hash_find_ptr(&cur->implicit_watches, watch->str))) {
watch             205 sapi/phpdbg/phpdbg_watch.c 			if (((old->flags ^ watch->flags) & (PHPDBG_WATCH_NORMAL|PHPDBG_WATCH_IMPLICIT)) == 0) {
watch             212 sapi/phpdbg/phpdbg_watch.c 				if (!(watch->flags & PHPDBG_WATCH_RECURSIVE) && !--cur->refs) {
watch             213 sapi/phpdbg/phpdbg_watch.c 					phpdbg_delete_watchpoints_recursive(watch);
watch             217 sapi/phpdbg/phpdbg_watch.c 				zend_hash_del(&cur->watches, watch->str);
watch             219 sapi/phpdbg/phpdbg_watch.c 					cur->watch = Z_PTR_P(zend_hash_get_current_data_ex(&cur->watches, NULL));
watch             221 sapi/phpdbg/phpdbg_watch.c 					cur->watch = Z_PTR_P(zend_hash_get_current_data_ex(&cur->implicit_watches, NULL));
watch             225 sapi/phpdbg/phpdbg_watch.c 				zend_hash_del(&cur->implicit_watches, watch->str);
watch             228 sapi/phpdbg/phpdbg_watch.c 			old->flags = watch->flags;
watch             229 sapi/phpdbg/phpdbg_watch.c 			phpdbg_free_watch(watch);
watch             230 sapi/phpdbg/phpdbg_watch.c 			efree(watch);
watch             231 sapi/phpdbg/phpdbg_watch.c 			watch = old;
watch             233 sapi/phpdbg/phpdbg_watch.c 		if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch             235 sapi/phpdbg/phpdbg_watch.c 				phpdbg_create_recursive_zval_watch(watch->parent);
watch             240 sapi/phpdbg/phpdbg_watch.c 		coll.refs = (watch->flags & PHPDBG_WATCH_RECURSIVE) != 0;
watch             241 sapi/phpdbg/phpdbg_watch.c 		coll.watch = watch;
watch             244 sapi/phpdbg/phpdbg_watch.c 		cur = zend_hash_index_add_mem(&PHPDBG_G(watch_collisions), (zend_ulong) watch->addr.ref, &coll, sizeof(phpdbg_watch_collision));
watch             245 sapi/phpdbg/phpdbg_watch.c 		phpdbg_store_watchpoint(cur->watch);
watch             246 sapi/phpdbg/phpdbg_watch.c 		phpdbg_activate_watchpoint(cur->watch);
watch             248 sapi/phpdbg/phpdbg_watch.c 			phpdbg_create_recursive_zval_watch(watch->parent);
watch             252 sapi/phpdbg/phpdbg_watch.c 	if (watch->flags & PHPDBG_WATCH_NORMAL) {
watch             253 sapi/phpdbg/phpdbg_watch.c 		cur->watch = watch;
watch             254 sapi/phpdbg/phpdbg_watch.c 		zend_hash_add_ptr(&cur->watches, watch->str, watch->parent);
watch             256 sapi/phpdbg/phpdbg_watch.c 	if (watch->flags & PHPDBG_WATCH_IMPLICIT) {
watch             257 sapi/phpdbg/phpdbg_watch.c 		zend_hash_add_ptr(&cur->implicit_watches, watch->str, watch->parent);
watch             261 sapi/phpdbg/phpdbg_watch.c static void phpdbg_remove_watch_collision(phpdbg_watchpoint_t *watch) {
watch             263 sapi/phpdbg/phpdbg_watch.c 	if ((cur = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) Z_COUNTED_P(watch->addr.zv)))) {
watch             265 sapi/phpdbg/phpdbg_watch.c 			phpdbg_delete_watchpoints_recursive(watch);
watch             268 sapi/phpdbg/phpdbg_watch.c 		zend_hash_del(&cur->watches, watch->str);
watch             269 sapi/phpdbg/phpdbg_watch.c 		zend_hash_del(&cur->implicit_watches, watch->str);
watch             272 sapi/phpdbg/phpdbg_watch.c 			cur->watch = Z_PTR_P(zend_hash_get_current_data_ex(&cur->watches, NULL));
watch             274 sapi/phpdbg/phpdbg_watch.c 			cur->watch = Z_PTR_P(zend_hash_get_current_data_ex(&cur->implicit_watches, NULL));
watch             276 sapi/phpdbg/phpdbg_watch.c 			phpdbg_deactivate_watchpoint(cur->watch);
watch             277 sapi/phpdbg/phpdbg_watch.c 			phpdbg_remove_watchpoint(cur->watch);
watch             279 sapi/phpdbg/phpdbg_watch.c 			zend_hash_index_del(&PHPDBG_G(watch_collisions), (zend_ulong) Z_COUNTED_P(watch->addr.zv));
watch             284 sapi/phpdbg/phpdbg_watch.c static phpdbg_watchpoint_t *phpdbg_create_watchpoint(phpdbg_watchpoint_t *watch);
watch             286 sapi/phpdbg/phpdbg_watch.c static phpdbg_watchpoint_t *phpdbg_create_reference_watch(phpdbg_watchpoint_t *watch) {
watch             288 sapi/phpdbg/phpdbg_watch.c 	watch->reference = ref;
watch             289 sapi/phpdbg/phpdbg_watch.c 	ref->flags = watch->flags;
watch             290 sapi/phpdbg/phpdbg_watch.c 	ref->str = watch->str;
watch             292 sapi/phpdbg/phpdbg_watch.c 	ref->parent = watch;
watch             294 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_zval_watchpoint(Z_REFVAL_P(watch->addr.zv), ref);
watch             322 sapi/phpdbg/phpdbg_watch.c static phpdbg_watchpoint_t *phpdbg_create_watchpoint(phpdbg_watchpoint_t *watch) {
watch             323 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *ret = watch;
watch             325 sapi/phpdbg/phpdbg_watch.c 	if (watch->type == WATCH_ON_ZVAL) {
watch             326 sapi/phpdbg/phpdbg_watch.c 		switch (Z_TYPE_P(watch->addr.zv)) {
watch             331 sapi/phpdbg/phpdbg_watch.c 				memset(watch->addr.zv, 0, sizeof(zend_value));
watch             336 sapi/phpdbg/phpdbg_watch.c 	if (!watch->parent || watch->parent->type != WATCH_ON_ZVAL || watch->type == WATCH_ON_HASHTABLE) {
watch             337 sapi/phpdbg/phpdbg_watch.c 		phpdbg_watchpoint_t *old_watch = zend_hash_find_ptr(&PHPDBG_G(watchpoints), watch->str);
watch             345 sapi/phpdbg/phpdbg_watch.c 	if (watch != old_watch) { \
watch             346 sapi/phpdbg/phpdbg_watch.c 		phpdbg_free_watch(watch); \
watch             347 sapi/phpdbg/phpdbg_watch.c 		efree(watch); \
watch             351 sapi/phpdbg/phpdbg_watch.c 			if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch             361 sapi/phpdbg/phpdbg_watch.c 					old_watch->flags |= watch->flags & (PHPDBG_WATCH_IMPLICIT | PHPDBG_WATCH_SIMPLE);
watch             366 sapi/phpdbg/phpdbg_watch.c 			if (watch->parent && watch->parent->type == WATCH_ON_HASHTABLE) {
watch             367 sapi/phpdbg/phpdbg_watch.c 				watch->parent->implicit_ht_count++;
watch             369 sapi/phpdbg/phpdbg_watch.c 			zend_hash_add_ptr(&PHPDBG_G(watchpoints), watch->str, watch);
watch             373 sapi/phpdbg/phpdbg_watch.c 	phpdbg_store_watchpoint(watch);
watch             375 sapi/phpdbg/phpdbg_watch.c 	if (watch->parent && watch->parent->type == WATCH_ON_ZVAL && Z_REFCOUNTED_P(watch->parent->addr.zv)) {
watch             376 sapi/phpdbg/phpdbg_watch.c 		phpdbg_add_watch_collision(phpdbg_create_refcounted_watchpoint(watch, Z_COUNTED_P(watch->parent->addr.zv)));
watch             379 sapi/phpdbg/phpdbg_watch.c 	if (watch->type == WATCH_ON_ZVAL) {
watch             380 sapi/phpdbg/phpdbg_watch.c 		if (watch->parent_container) {
watch             383 sapi/phpdbg/phpdbg_watch.c 			if (!(find = phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) watch->parent_container))) {
watch             385 sapi/phpdbg/phpdbg_watch.c 				hti->dtor = watch->parent_container->pDestructor;
watch             388 sapi/phpdbg/phpdbg_watch.c 				phpdbg_btree_insert(&PHPDBG_G(watch_HashTables), (zend_ulong) watch->parent_container, hti);
watch             389 sapi/phpdbg/phpdbg_watch.c 				watch->parent_container->pDestructor = (dtor_func_t) phpdbg_watch_HashTable_dtor;
watch             393 sapi/phpdbg/phpdbg_watch.c 			zend_hash_add_ptr(ht_watches, watch->name_in_parent, watch);
watch             396 sapi/phpdbg/phpdbg_watch.c 		if (Z_ISREF_P(watch->addr.zv)) {
watch             397 sapi/phpdbg/phpdbg_watch.c 			ret = phpdbg_create_reference_watch(watch);
watch             401 sapi/phpdbg/phpdbg_watch.c 	phpdbg_activate_watchpoint(watch);
watch             406 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_simple_watchpoint(phpdbg_watchpoint_t *watch) {
watch             407 sapi/phpdbg/phpdbg_watch.c 	watch->flags |= PHPDBG_WATCH_SIMPLE;
watch             409 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_watchpoint(watch);
watch             416 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch = emalloc(sizeof(phpdbg_watchpoint_t));
watch             419 sapi/phpdbg/phpdbg_watch.c 	watch->parent = zv_watch;
watch             425 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_ht_watchpoint(ht, watch);
watch             427 sapi/phpdbg/phpdbg_watch.c 	if (phpdbg_create_watchpoint(watch) == NULL) {
watch             432 sapi/phpdbg/phpdbg_watch.c 		watch->flags |= PHPDBG_WATCH_ARRAY;
watch             434 sapi/phpdbg/phpdbg_watch.c 		watch->flags |= PHPDBG_WATCH_OBJECT;
watch             437 sapi/phpdbg/phpdbg_watch.c 	phpdbg_add_watch_collision(phpdbg_create_refcounted_watchpoint(watch, Z_COUNTED_P(zv)));
watch             442 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_watchpoint(phpdbg_watchpoint_t *watch) {
watch             443 sapi/phpdbg/phpdbg_watch.c 	if (watch->type != WATCH_ON_ZVAL) {
watch             447 sapi/phpdbg/phpdbg_watch.c 	watch->flags |= PHPDBG_WATCH_RECURSIVE;
watch             448 sapi/phpdbg/phpdbg_watch.c 	watch = phpdbg_create_watchpoint(watch);
watch             453 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_ht_watch(phpdbg_watchpoint_t *watch) {
watch             458 sapi/phpdbg/phpdbg_watch.c 	ZEND_ASSERT(watch->type == WATCH_ON_HASHTABLE);
watch             460 sapi/phpdbg/phpdbg_watch.c 	ZEND_HASH_FOREACH_KEY_VAL(HT_WATCH_HT(watch), h, key, zv) {
watch             464 sapi/phpdbg/phpdbg_watch.c 		new_watch->parent = watch;
watch             465 sapi/phpdbg/phpdbg_watch.c 		new_watch->parent_container = HT_WATCH_HT(watch);
watch             474 sapi/phpdbg/phpdbg_watch.c 		new_watch->str = strpprintf(0, "%.*s%s%s%s", (int) ZSTR_LEN(watch->str) - 2, ZSTR_VAL(watch->str), (watch->flags & PHPDBG_WATCH_ARRAY) ? "[" : "->", phpdbg_get_property_key(ZSTR_VAL(new_watch->name_in_parent)), (watch->flags & PHPDBG_WATCH_ARRAY) ? "]" : "");
watch             488 sapi/phpdbg/phpdbg_watch.c static int phpdbg_create_recursive_zval_watch(phpdbg_watchpoint_t *watch) {
watch             492 sapi/phpdbg/phpdbg_watch.c 	ZEND_ASSERT(watch->type == WATCH_ON_ZVAL);
watch             494 sapi/phpdbg/phpdbg_watch.c 	zvp = watch->addr.zv;
watch             501 sapi/phpdbg/phpdbg_watch.c 		new_watch->parent = watch;
watch             502 sapi/phpdbg/phpdbg_watch.c 		new_watch->parent_container = watch->parent_container;
watch             503 sapi/phpdbg/phpdbg_watch.c 		new_watch->name_in_parent = watch->name_in_parent;
watch             505 sapi/phpdbg/phpdbg_watch.c 		new_watch->str = strpprintf(0, "%.*s[]", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str));
watch             523 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_implicit_parents(phpdbg_watchpoint_t *watch) {
watch             524 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *parent = watch->parent;
watch             538 sapi/phpdbg/phpdbg_watch.c 		if (parent->type == WATCH_ON_ZVAL && Z_REFCOUNTED_P(watch->addr.zv)) {
watch             546 sapi/phpdbg/phpdbg_watch.c static int phpdbg_delete_watchpoint_recursive(phpdbg_watchpoint_t *watch, zend_bool user_request) {
watch             547 sapi/phpdbg/phpdbg_watch.c 	if (watch->type == WATCH_ON_HASHTABLE) {
watch             549 sapi/phpdbg/phpdbg_watch.c 			phpdbg_delete_ht_watchpoints_recursive(watch);
watch             554 sapi/phpdbg/phpdbg_watch.c 			ht = HT_FROM_ZVP(watch->addr.zv);
watch             560 sapi/phpdbg/phpdbg_watch.c 	} else if (watch->type == WATCH_ON_ZVAL) {
watch             561 sapi/phpdbg/phpdbg_watch.c 		phpdbg_delete_zval_watchpoints_recursive(watch);
watch             564 sapi/phpdbg/phpdbg_watch.c 	return zend_hash_del(&PHPDBG_G(watchpoints), watch->str);
watch             567 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_ht_watchpoints_recursive(phpdbg_watchpoint_t *watch) {
watch             572 sapi/phpdbg/phpdbg_watch.c 	ZEND_HASH_FOREACH_KEY(HT_WATCH_HT(watch), numkey, strkey) {
watch             574 sapi/phpdbg/phpdbg_watch.c 			str = strpprintf(0, "%.*s%s%s%s", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str), (watch->flags & PHPDBG_WATCH_ARRAY) ? "[" : "->", phpdbg_get_property_key(ZSTR_VAL(strkey)), (watch->flags & PHPDBG_WATCH_ARRAY) ? "]" : "");
watch             576 sapi/phpdbg/phpdbg_watch.c 			str = strpprintf(0, "%.*s%s" ZEND_LONG_FMT "%s", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str), (watch->flags & PHPDBG_WATCH_ARRAY) ? "[" : "->", numkey, (watch->flags & PHPDBG_WATCH_ARRAY) ? "]" : "");
watch             587 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_zval_watchpoints_recursive(phpdbg_watchpoint_t *watch) {
watch             588 sapi/phpdbg/phpdbg_watch.c 	if (Z_REFCOUNTED_P(watch->addr.zv)) {
watch             589 sapi/phpdbg/phpdbg_watch.c 		phpdbg_remove_watch_collision(watch);
watch             594 sapi/phpdbg/phpdbg_watch.c static void phpdbg_delete_watchpoints_recursive(phpdbg_watchpoint_t *watch) {
watch             595 sapi/phpdbg/phpdbg_watch.c 	if (watch->type == WATCH_ON_ZVAL) {
watch             596 sapi/phpdbg/phpdbg_watch.c 		phpdbg_delete_zval_watchpoints_recursive(watch);
watch             597 sapi/phpdbg/phpdbg_watch.c 	} else if (watch->type == WATCH_ON_HASHTABLE) {
watch             598 sapi/phpdbg/phpdbg_watch.c 		phpdbg_delete_ht_watchpoints_recursive(watch);
watch             604 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch;
watch             611 sapi/phpdbg/phpdbg_watch.c 	watch = result->ptr;
watch             613 sapi/phpdbg/phpdbg_watch.c 	if (!(watch->flags & PHPDBG_WATCH_NORMAL) || (watch->parent && (watch->parent->flags & PHPDBG_WATCH_RECURSIVE))) {
watch             617 sapi/phpdbg/phpdbg_watch.c 	if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch             618 sapi/phpdbg/phpdbg_watch.c 		ret = phpdbg_delete_watchpoint_recursive(watch, 1);
watch             620 sapi/phpdbg/phpdbg_watch.c 		ret = zend_hash_del(&PHPDBG_G(watchpoints), watch->str);
watch             631 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch = ecalloc(1, sizeof(phpdbg_watchpoint_t));
watch             632 sapi/phpdbg/phpdbg_watch.c 	watch->str = zend_string_init(name, namelen, 0);
watch             633 sapi/phpdbg/phpdbg_watch.c 	watch->name_in_parent = zend_string_init(key, keylen, 0);
watch             634 sapi/phpdbg/phpdbg_watch.c 	watch->parent_container = parent;
watch             635 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_zval_watchpoint(zv, watch);
watch             637 sapi/phpdbg/phpdbg_watch.c 	ret = callback(watch);
watch             643 sapi/phpdbg/phpdbg_watch.c 		phpdbg_free_watch(watch);
watch             644 sapi/phpdbg/phpdbg_watch.c 		efree(watch);
watch             657 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch;
watch             659 sapi/phpdbg/phpdbg_watch.c 	if ((watch = zend_hash_str_find_ptr(&PHPDBG_G(watchpoints), name, namelen))) {
watch             660 sapi/phpdbg/phpdbg_watch.c 		watch->flags |= PHPDBG_WATCH_IMPLICIT;
watch             661 sapi/phpdbg/phpdbg_watch.c 		PHPDBG_G(watch_tmp) = watch;
watch             665 sapi/phpdbg/phpdbg_watch.c 	watch = ecalloc(1, sizeof(phpdbg_watchpoint_t));
watch             666 sapi/phpdbg/phpdbg_watch.c 	watch->flags = PHPDBG_WATCH_IMPLICIT;
watch             667 sapi/phpdbg/phpdbg_watch.c 	watch->str = zend_string_init(name, namelen, 0);
watch             668 sapi/phpdbg/phpdbg_watch.c 	watch->name_in_parent = zend_string_init(key, keylen, 0);
watch             669 sapi/phpdbg/phpdbg_watch.c 	watch->parent_container = parent;
watch             670 sapi/phpdbg/phpdbg_watch.c 	watch->parent = PHPDBG_G(watch_tmp);
watch             671 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_zval_watchpoint(zv, watch);
watch             673 sapi/phpdbg/phpdbg_watch.c 	phpdbg_create_watchpoint(watch);
watch             678 sapi/phpdbg/phpdbg_watch.c 	PHPDBG_G(watch_tmp) = watch;
watch             758 sapi/phpdbg/phpdbg_watch.c 		phpdbg_watchpoint_t *watch = result->ptr;
watch             760 sapi/phpdbg/phpdbg_watch.c 		if (watch->flags & PHPDBG_WATCH_NORMAL) {
watch             763 sapi/phpdbg/phpdbg_watch.c 			phpdbg_notice("watchdelete", "variable=\"%.*s\" recursive=\"%s\"", "%.*s was removed, removing watchpoint%s", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str), (watch->flags & PHPDBG_WATCH_RECURSIVE) ? " recursively" : "");
watch             766 sapi/phpdbg/phpdbg_watch.c 		if ((result = phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) watch->parent_container))) {
watch             769 sapi/phpdbg/phpdbg_watch.c 			zend_hash_del(&hti->watches, watch->name_in_parent);
watch             771 sapi/phpdbg/phpdbg_watch.c 				watch->parent_container->pDestructor = hti->dtor;
watch             773 sapi/phpdbg/phpdbg_watch.c 				phpdbg_btree_delete(&PHPDBG_G(watch_HashTables), (zend_ulong) watch->parent_container);
watch             780 sapi/phpdbg/phpdbg_watch.c 		if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch             781 sapi/phpdbg/phpdbg_watch.c 			phpdbg_delete_watchpoint_recursive(watch, 0);
watch             783 sapi/phpdbg/phpdbg_watch.c 			zend_hash_del(&PHPDBG_G(watchpoints), watch->str);
watch             811 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch;
watch             814 sapi/phpdbg/phpdbg_watch.c 	watch = phpdbg_check_for_watchpoint(
watch             822 sapi/phpdbg/phpdbg_watch.c 	if (watch == NULL) {
watch             826 sapi/phpdbg/phpdbg_watch.c 	page = phpdbg_get_page_boundary(watch->addr.ptr);
watch             827 sapi/phpdbg/phpdbg_watch.c 	size = phpdbg_get_total_page_size(watch->addr.ptr, watch->size);
watch             850 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch = (phpdbg_watchpoint_t *) Z_PTR_P(pDest);
watch             852 sapi/phpdbg/phpdbg_watch.c 	if (watch->flags & PHPDBG_WATCH_IMPLICIT) {
watch             853 sapi/phpdbg/phpdbg_watch.c 		watch->flags = PHPDBG_WATCH_SIMPLE; // tiny hack for delete_implicit_parents
watch             855 sapi/phpdbg/phpdbg_watch.c 		if (watch->type == WATCH_ON_ZVAL) {
watch             856 sapi/phpdbg/phpdbg_watch.c 			phpdbg_delete_zval_watchpoints_recursive(watch);
watch             857 sapi/phpdbg/phpdbg_watch.c 		} else if (watch->type == WATCH_ON_HASHTABLE) {
watch             860 sapi/phpdbg/phpdbg_watch.c 			watch->implicit_ht_count++;
watch             862 sapi/phpdbg/phpdbg_watch.c 			ZEND_HASH_FOREACH_PTR(&((phpdbg_watch_ht_info *) phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) HT_WATCH_HT(watch))->ptr)->watches, watchpoint) {
watch             868 sapi/phpdbg/phpdbg_watch.c 	phpdbg_delete_implicit_parents(watch);
watch             870 sapi/phpdbg/phpdbg_watch.c 	phpdbg_deactivate_watchpoint(watch);
watch             871 sapi/phpdbg/phpdbg_watch.c 	phpdbg_remove_watchpoint(watch);
watch             873 sapi/phpdbg/phpdbg_watch.c 	phpdbg_free_watch(watch);
watch             874 sapi/phpdbg/phpdbg_watch.c 	efree(watch);
watch             920 sapi/phpdbg/phpdbg_watch.c 		phpdbg_watchpoint_t *watch = result->ptr;
watch             921 sapi/phpdbg/phpdbg_watch.c 		void *oldPtr = (char *) &dump->data + ((size_t) watch->addr.ptr - (size_t) dump->page);
watch             925 sapi/phpdbg/phpdbg_watch.c 		if ((size_t) watch->addr.ptr < (size_t) dump->page || (size_t) watch->addr.ptr + watch->size > (size_t) dump->page + dump->size) {
watch             930 sapi/phpdbg/phpdbg_watch.c 		if ((watch->type == WATCH_ON_HASHTABLE || watch->type == WATCH_ON_ZVAL) && watch->parent_container) {
watch             931 sapi/phpdbg/phpdbg_watch.c 			if ((curTest = zend_symtable_find(watch->parent_container, watch->name_in_parent))) {
watch             936 sapi/phpdbg/phpdbg_watch.c 				if (watch->type == WATCH_ON_HASHTABLE) {
watch             947 sapi/phpdbg/phpdbg_watch.c 				if (curTest != watch->addr.ptr) {
watch             948 sapi/phpdbg/phpdbg_watch.c 					phpdbg_deactivate_watchpoint(watch);
watch             949 sapi/phpdbg/phpdbg_watch.c 					phpdbg_remove_watchpoint(watch);
watch             950 sapi/phpdbg/phpdbg_watch.c 					watch->addr.ptr = curTest;
watch             951 sapi/phpdbg/phpdbg_watch.c 					phpdbg_store_watchpoint(watch);
watch             952 sapi/phpdbg/phpdbg_watch.c 					phpdbg_activate_watchpoint(watch);
watch             965 sapi/phpdbg/phpdbg_watch.c 			switch (watch->type) {
watch             967 sapi/phpdbg/phpdbg_watch.c 					do_break = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */) != 0;
watch             973 sapi/phpdbg/phpdbg_watch.c 					do_break = zend_hash_num_elements(HT_PTR_HT(oldPtr)) != zend_hash_num_elements(HT_WATCH_HT(watch));
watch             979 sapi/phpdbg/phpdbg_watch.c 					do_break = memcmp(oldPtr, watch->addr.ref, sizeof(uint32_t) /* no zend_refcounted metadata info */) != 0;
watch             989 sapi/phpdbg/phpdbg_watch.c 			if (!(watch->flags & PHPDBG_WATCH_NORMAL)) {
watch             996 sapi/phpdbg/phpdbg_watch.c 				phpdbg_notice("watchhit", "variable=\"%s\"", "Breaking on watchpoint %.*s", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str));
watch            1000 sapi/phpdbg/phpdbg_watch.c 			switch (watch->type) {
watch            1002 sapi/phpdbg/phpdbg_watch.c 					zend_bool show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* no metadata info */) != 0;
watch            1004 sapi/phpdbg/phpdbg_watch.c 					if ((watch->flags & PHPDBG_WATCH_NORMAL) && (removed || show_value)) {
watch            1019 sapi/phpdbg/phpdbg_watch.c 						if (watch->flags & PHPDBG_WATCH_NORMAL) {
watch            1020 sapi/phpdbg/phpdbg_watch.c 							phpdbg_notice("watchdelete", "variable=\"%.*s\"", "Watchpoint %.*s was unset, removing watchpoint", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str));
watch            1022 sapi/phpdbg/phpdbg_watch.c 						zend_hash_del(&PHPDBG_G(watchpoints), watch->str);
watch            1027 sapi/phpdbg/phpdbg_watch.c 							phpdbg_remove_watch_collision(watch);
watch            1032 sapi/phpdbg/phpdbg_watch.c 					if ((watch->flags & PHPDBG_WATCH_NORMAL) && show_value) {
watch            1033 sapi/phpdbg/phpdbg_watch.c 						phpdbg_out("New value%s: ", Z_ISREF_P(watch->addr.zv) ? " (reference)" : "");
watch            1034 sapi/phpdbg/phpdbg_watch.c 						phpdbg_xml("<watchvalue %r%s type=\"new\">", Z_ISREF_P(watch->addr.zv) ? " reference=\"reference\"" : "");
watch            1035 sapi/phpdbg/phpdbg_watch.c 						zend_print_flat_zval_r(watch->addr.zv);
watch            1041 sapi/phpdbg/phpdbg_watch.c 					if (Z_PTR_P(watch->addr.zv) != Z_PTR_P((zval *) oldPtr) || Z_TYPE_P(watch->addr.zv) != Z_TYPE_P((zval *) oldPtr)) {
watch            1043 sapi/phpdbg/phpdbg_watch.c 							zval *new_zv = watch->addr.zv;
watch            1044 sapi/phpdbg/phpdbg_watch.c 							watch->addr.ptr = oldPtr;
watch            1045 sapi/phpdbg/phpdbg_watch.c 							phpdbg_remove_watch_collision(watch);
watch            1046 sapi/phpdbg/phpdbg_watch.c 							watch->addr.zv = new_zv;
watch            1048 sapi/phpdbg/phpdbg_watch.c 						if (Z_REFCOUNTED_P(watch->addr.zv)) {
watch            1049 sapi/phpdbg/phpdbg_watch.c 							if ((watch->flags & PHPDBG_WATCH_NORMAL) && (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS)) {
watch            1050 sapi/phpdbg/phpdbg_watch.c 								phpdbg_writeln("watchrefcount", "type=\"new\" refcount=\"%d\"", "New refcount: %d", Z_REFCOUNT_P(watch->addr.zv));
watch            1052 sapi/phpdbg/phpdbg_watch.c 							if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch            1053 sapi/phpdbg/phpdbg_watch.c 								phpdbg_create_recursive_watchpoint(watch);
watch            1054 sapi/phpdbg/phpdbg_watch.c 							} else if (Z_ISREF_P(watch->addr.zv)) {
watch            1055 sapi/phpdbg/phpdbg_watch.c 								phpdbg_create_reference_watch(watch);
watch            1064 sapi/phpdbg/phpdbg_watch.c 					elementDiff = zend_hash_num_elements(HT_PTR_HT(oldPtr)) - zend_hash_num_elements(HT_WATCH_HT(watch));
watch            1065 sapi/phpdbg/phpdbg_watch.c 					if ((watch->flags & PHPDBG_WATCH_NORMAL) && elementDiff) {
watch            1073 sapi/phpdbg/phpdbg_watch.c 					if (watch->flags & PHPDBG_WATCH_RECURSIVE) {
watch            1074 sapi/phpdbg/phpdbg_watch.c 						phpdbg_create_recursive_ht_watch(watch);
watch            1076 sapi/phpdbg/phpdbg_watch.c 					if ((watch->flags & PHPDBG_WATCH_NORMAL) && HT_WATCH_HT(watch)->nInternalPointer != HT_PTR_HT(oldPtr)->nInternalPointer) {
watch            1081 sapi/phpdbg/phpdbg_watch.c 					if ((watch->flags & PHPDBG_WATCH_NORMAL) && (PHPDBG_G(flags) & PHPDBG_SHOW_REFCOUNTS)) {
watch            1083 sapi/phpdbg/phpdbg_watch.c 						phpdbg_writeln("watchrefcount", "type=\"new\" refcount=\"%d\"", "New refcount: %d", GC_REFCOUNT(watch->addr.ref));
watch            1122 sapi/phpdbg/phpdbg_watch.c 	phpdbg_watchpoint_t *watch;
watch            1126 sapi/phpdbg/phpdbg_watch.c 	ZEND_HASH_FOREACH_PTR(&PHPDBG_G(watchpoints), watch) {
watch            1127 sapi/phpdbg/phpdbg_watch.c 		if (watch->flags & PHPDBG_WATCH_NORMAL) {
watch            1128 sapi/phpdbg/phpdbg_watch.c 			phpdbg_writeln("watchvariable", "variable=\"%.*s\" on=\"%s\" type=\"%s\"", "%.*s (%s, %s)", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str), watch->type == WATCH_ON_HASHTABLE ? "array" : watch->type == WATCH_ON_REFCOUNTED ? "refcount" : "variable", watch->flags == PHPDBG_WATCH_RECURSIVE ? "recursive" : "simple");
watch            1141 sapi/phpdbg/phpdbg_watch.c 		phpdbg_watchpoint_t *watch = result->ptr;
watch            1143 sapi/phpdbg/phpdbg_watch.c 		if ((size_t) watch->addr.ptr + watch->size > (size_t) ptr) {
watch            1144 sapi/phpdbg/phpdbg_watch.c 			if (watch->type == WATCH_ON_REFCOUNTED) {
watch            1146 sapi/phpdbg/phpdbg_watch.c 				phpdbg_deactivate_watchpoint(watch);
watch            1147 sapi/phpdbg/phpdbg_watch.c 				phpdbg_remove_watchpoint(watch);
watch            1149 sapi/phpdbg/phpdbg_watch.c 				if (watch->type == WATCH_ON_ZVAL) {
watch            1150 sapi/phpdbg/phpdbg_watch.c 					phpdbg_remove_watch_collision(watch);
watch            1152 sapi/phpdbg/phpdbg_watch.c 				if (watch->type == WATCH_ON_HASHTABLE && (watch->flags & PHPDBG_WATCH_SIMPLE)) {
watch            1154 sapi/phpdbg/phpdbg_watch.c 					phpdbg_notice("watchdelete", "variable=\"%.*s\" recursive=\"%s\"", "Array %.*s was removed, removing watchpoint%s", (int) ZSTR_LEN(watch->str), ZSTR_VAL(watch->str), (watch->flags & PHPDBG_WATCH_RECURSIVE) ? " recursively" : "");
watch            1156 sapi/phpdbg/phpdbg_watch.c 				if (watch->type == WATCH_ON_HASHTABLE || watch->parent == NULL || watch->parent->type != WATCH_ON_ZVAL) { /* no references */
watch            1157 sapi/phpdbg/phpdbg_watch.c 					zend_hash_del(&PHPDBG_G(watchpoints), watch->str);
watch              80 sapi/phpdbg/phpdbg_watch.h 	phpdbg_watchpoint_t *watch;
watch              99 sapi/phpdbg/phpdbg_watch.h void phpdbg_create_addr_watchpoint(void *addr, size_t size, phpdbg_watchpoint_t *watch);
watch             100 sapi/phpdbg/phpdbg_watch.h void phpdbg_create_zval_watchpoint(zval *zv, phpdbg_watchpoint_t *watch);