Lines Matching refs:element

445 void phpdbg_recurse_watch_element(phpdbg_watch_element *element);
446 void phpdbg_remove_watch_element_recursively(phpdbg_watch_element *element);
447 void phpdbg_free_watch_element(phpdbg_watch_element *element);
449 void phpdbg_watch_parent_ht(phpdbg_watch_element *element);
451 …atch_element *phpdbg_add_watch_element(phpdbg_watchpoint_t *watch, phpdbg_watch_element *element) { argument
466 if ((old_element = zend_hash_find_ptr(&watch->elements, element->str))) {
467 phpdbg_free_watch_element(element);
472 element->watch = watch;
473 zend_hash_add_ptr(&watch->elements, element->str, element);
475 if (element->flags & PHPDBG_WATCH_RECURSIVE) {
476 phpdbg_recurse_watch_element(element);
479 return element;
482 phpdbg_watch_element *phpdbg_add_bucket_watch_element(Bucket *bucket, phpdbg_watch_element *element argument
485 element = phpdbg_add_watch_element(&watch, element);
486 phpdbg_watch_parent_ht(element);
487 return element;
490 phpdbg_watch_element *phpdbg_add_ht_watch_element(zval *zv, phpdbg_watch_element *element) { argument
498 element->flags |= Z_TYPE_P(zv) == IS_ARRAY ? PHPDBG_WATCH_ARRAY : PHPDBG_WATCH_OBJECT;
500 return phpdbg_add_watch_element(&watch, element);
503 zend_bool phpdbg_is_recursively_watched(void *ptr, phpdbg_watch_element *element) { argument
504 phpdbg_watch_element *next = element;
506 element = next;
507 if (element->watch->addr.ptr == ptr) {
510 next = element->parent;
511 } while (!(element->flags & PHPDBG_WATCH_RECURSIVE_ROOT));
516 void phpdbg_add_recursive_watch_from_ht(phpdbg_watch_element *element, zend_long idx, zend_string *… argument
518 if (phpdbg_is_recursively_watched(zv, element)) {
525 …r = strpprintf(0, (element->flags & PHPDBG_WATCH_ARRAY) ? "%.*s[%s]" : "%.*s->%s", (int) ZSTR_LEN(
527 …f(0, (element->flags & PHPDBG_WATCH_ARRAY) ? "%.*s[" ZEND_LONG_FMT "]" : "%.*s->" ZEND_LONG_FMT, (…
533 child->parent = element;
535 child->parent_container = HT_WATCH_HT(element->watch);
536 zend_hash_add_ptr(&element->child_container, child->str, child);
540 void phpdbg_recurse_watch_element(phpdbg_watch_element *element) { argument
544 if (element->watch->type == WATCH_ON_ZVAL || element->watch->type == WATCH_ON_BUCKET) {
545 zv = element->watch->addr.zv;
551 if (element->child) {
552 phpdbg_remove_watch_element_recursively(element->child);
556 || phpdbg_is_recursively_watched(HT_WATCH_OFFSET + (char *) HT_FROM_ZVP(zv), element)) {
557 if (element->child) {
558 phpdbg_free_watch_element(element->child);
559 element->child = NULL;
564 if (element->child) {
565 child = element->child;
569 child->str = strpprintf(0, "%.*s[]", (int) ZSTR_LEN(element->str), ZSTR_VAL(element->str));
571 child->parent = element;
573 element->child = child;
577 } else if (zend_hash_num_elements(&element->child_container) == 0) {
581 ZEND_ASSERT(element->watch->type == WATCH_ON_HASHTABLE);
582 ZEND_HASH_FOREACH_KEY_VAL(HT_WATCH_HT(element->watch), idx, str, zv) {
583 phpdbg_add_recursive_watch_from_ht(element, idx, str, zv);
588 void phpdbg_watch_parent_ht(phpdbg_watch_element *element) { argument
589 if (element->watch->type == WATCH_ON_BUCKET) {
593 ZEND_ASSERT(element->parent_container);
594 …if (!(res = phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) element->parent_container)…
596 hti->ht = element->parent_container;
614 zend_hash_add_ptr(&hti->watches, element->name_in_parent, element);
618 void phpdbg_unwatch_parent_ht(phpdbg_watch_element *element) { argument
619 if (element->watch->type == WATCH_ON_BUCKET) {
620 …phpdbg_btree_result *res = phpdbg_btree_find(&PHPDBG_G(watch_HashTables), (zend_ulong) element->pa…
621 ZEND_ASSERT(element->parent_container);
632 zend_hash_del(&hti->watches, element->name_in_parent);
641 void phpdbg_dissociate_watch_element(phpdbg_watch_element *element, phpdbg_watch_element *until);
642 void phpdbg_free_watch_element_tree(phpdbg_watch_element *element);
644 void phpdbg_queue_element_for_recreation(phpdbg_watch_element *element) { argument
648 if ((prev = zend_hash_find_ptr(&PHPDBG_G(watch_recreation), element->str))) {
651 if (child == element) {
657 zend_hash_update_ptr(&PHPDBG_G(watch_recreation), element->str, element);
660 phpdbg_dissociate_watch_element(element, prev);
662 if (!element->parent) {
664 zend_hash_index_add_empty_element(&PHPDBG_G(watch_free), (zend_ulong) element->parent_container);
668 zend_bool phpdbg_try_readding_watch_element(zval *parent, phpdbg_watch_element *element) { argument
674 } else if (element->flags & (PHPDBG_WATCH_ARRAY | PHPDBG_WATCH_OBJECT)) {
676 char *oldPtr = ((char *) &element->backup.ht) + HT_WATCH_OFFSET;
678 phpdbg_print_watch_diff(WATCH_ON_HASHTABLE, element->str, oldPtr, htPtr);
681 phpdbg_add_ht_watch_element(parent, element);
682 } else if ((zv = zend_symtable_find(ht, element->name_in_parent))) {
683 if (element->flags & PHPDBG_WATCH_IMPLICIT) {
693 if (!phpdbg_try_readding_watch_element(next, element->child)) {
696 } else if (phpdbg_check_watch_diff(WATCH_ON_ZVAL, &element->backup.zv, zv)) {
697 phpdbg_print_watch_diff(WATCH_ON_ZVAL, element->str, &element->backup.zv, zv);
700 element->parent_container = ht;
701 phpdbg_add_bucket_watch_element((Bucket *) zv, element);
702 phpdbg_watch_parent_ht(element);
710 void phpdbg_automatic_dequeue_free(phpdbg_watch_element *element) { argument
711 phpdbg_watch_element *child = element;
719 phpdbg_free_watch_element_tree(element);
723 phpdbg_watch_element *element; local
725 ZEND_HASH_FOREACH_PTR(&PHPDBG_G(watch_recreation), element) {
726 …ZEND_ASSERT(element->flags & (PHPDBG_WATCH_IMPLICIT | PHPDBG_WATCH_RECURSIVE_ROOT | PHPDBG_WATCH_S…
727 …if (element->parent || zend_hash_index_find(&PHPDBG_G(watch_free), (zend_ulong) element->parent_co…
729 if (element->parent) {
730 …ZEND_ASSERT(element->parent->watch->type == WATCH_ON_ZVAL || element->parent->watch->type == WATCH…
731 zv = element->parent->watch->addr.zv;
737 ZVAL_ARR(zv, element->parent_container);
739 if (!phpdbg_try_readding_watch_element(zv, element)) {
740 phpdbg_automatic_dequeue_free(element);
743 phpdbg_automatic_dequeue_free(element);
752 void phpdbg_clean_watch_element(phpdbg_watch_element *element);
754 void phpdbg_free_watch_element(phpdbg_watch_element *element) { argument
755 zend_string_release(element->str);
756 if (element->name_in_parent) {
757 zend_string_release(element->name_in_parent);
759 efree(element);
763 void phpdbg_remove_watch_element_recursively(phpdbg_watch_element *element) { argument
764 if (element->child) {
765 phpdbg_remove_watch_element_recursively(element->child);
766 phpdbg_free_watch_element(element->child);
767 element->child = NULL;
768 } else if (element->flags & (PHPDBG_WATCH_ARRAY | PHPDBG_WATCH_OBJECT)) {
770 ZEND_HASH_FOREACH_PTR(&element->child_container, child) {
774 zend_hash_destroy(&element->child_container);
777 phpdbg_clean_watch_element(element);
781 void phpdbg_remove_watch_element(phpdbg_watch_element *element) { argument
782 phpdbg_watch_element *parent = element->parent, *child = element->child;
800 if (element->flags & PHPDBG_WATCH_RECURSIVE_ROOT) {
801 phpdbg_remove_watch_element_recursively(element);
803 phpdbg_clean_watch_element(element);
805 zend_hash_index_del(&PHPDBG_G(watch_elements), element->id);
806 phpdbg_free_watch_element(element);
809 void phpdbg_backup_watch_element(phpdbg_watch_element *element) { argument
810 …memcpy(&element->backup, &element->watch->backup, /* element->watch->size */ sizeof(element->backu…
814 void phpdbg_dissociate_watch_element(phpdbg_watch_element *element, phpdbg_watch_element *until) { argument
815 phpdbg_watch_element *child = element;
816 …ZEND_ASSERT((element->flags & (PHPDBG_WATCH_RECURSIVE_ROOT | PHPDBG_WATCH_RECURSIVE)) != PHPDBG_WA…
818 if (element->flags & PHPDBG_WATCH_RECURSIVE_ROOT) {
819 phpdbg_backup_watch_element(element);
820 phpdbg_remove_watch_element_recursively(element);
838 if (element->child == NULL) {
839 phpdbg_backup_watch_element(element);
841 phpdbg_clean_watch_element(element);
845 void phpdbg_free_watch_element_tree(phpdbg_watch_element *element) { argument
846 phpdbg_watch_element *parent = element->parent, *child = element->child;
858 phpdbg_free_watch_element(element);
861 void phpdbg_update_watch_element_watch(phpdbg_watch_element *element) { argument
862 if (element->flags & PHPDBG_WATCH_IMPLICIT) {
863 phpdbg_watch_element *child = element->child;
868 ZEND_ASSERT(element->watch->type == WATCH_ON_ZVAL || element->watch->type == WATCH_ON_BUCKET);
869 phpdbg_queue_element_for_recreation(element);
870 } else if (element->flags & (PHPDBG_WATCH_RECURSIVE_ROOT | PHPDBG_WATCH_SIMPLE)) {
871 phpdbg_queue_element_for_recreation(element);
872 } else if (element->flags & PHPDBG_WATCH_RECURSIVE) {
873 phpdbg_remove_watch_element_recursively(element);
874 if (element->parent->flags & (PHPDBG_WATCH_OBJECT | PHPDBG_WATCH_ARRAY)) {
875 zend_hash_del(&element->parent->child_container, element->str);
877 element->parent->child = NULL;
879 phpdbg_free_watch_element(element);
885 phpdbg_watch_element *element; local
891 ZEND_HASH_FOREACH_PTR(&parent->elements, element) {
892 phpdbg_update_watch_element_watch(element);
899 phpdbg_watch_element *element; local
911 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
912 phpdbg_update_watch_element_watch(element);
919 void phpdbg_clean_watch_element(phpdbg_watch_element *element) { argument
920 HashTable *elements = &element->watch->elements;
921 phpdbg_unwatch_parent_ht(element);
922 zend_hash_del(elements, element->str);
924 phpdbg_remove_watchpoint(element->watch);
931 phpdbg_watch_element *element; local
942 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
943 if (element->flags & PHPDBG_WATCH_IMPLICIT) {
945 phpdbg_update_watch_element_watch(element->child);
949 name = element->str;
962 phpdbg_watch_element *element; local
966 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
967 if (element->flags & PHPDBG_WATCH_RECURSIVE) {
981 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
982 if (element->flags & PHPDBG_WATCH_RECURSIVE) {
983 phpdbg_add_recursive_watch_from_ht(element, idx, str, zv);
1018 phpdbg_watch_element *element = NULL; local
1021 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
1025 ZEND_ASSERT(element); /* elements must be non-empty */
1026 new = zend_symtable_find(element->parent_container, element->name_in_parent);
1059 phpdbg_watch_element *element; local
1061 ZEND_HASH_FOREACH_PTR(&watch->elements, element) {
1062 if (element->flags & PHPDBG_WATCH_RECURSIVE) {
1063 phpdbg_recurse_watch_element(element);
1147 phpdbg_watch_element *element; local
1150 ZEND_HASH_FOREACH_PTR(&hti->watches, element) {
1152 phpdbg_remove_watchpoint(element->watch);
1178 phpdbg_watch_element *element; local
1182 ZEND_HASH_FOREACH_PTR(&PHPDBG_G(watch_elements), element) {
1183 …) ZSTR_LEN(element->str), ZSTR_VAL(element->str), (element->flags & (PHPDBG_WATCH_ARRAY|PHPDBG_WAT…
1189 static int phpdbg_create_simple_watchpoint(zval *zv, phpdbg_watch_element *element) { argument
1190 element->flags = PHPDBG_WATCH_SIMPLE;
1191 phpdbg_add_bucket_watch_element((Bucket *) zv, element);
1195 static int phpdbg_create_array_watchpoint(zval *zv, phpdbg_watch_element *element) { argument
1207 str = strpprintf(0, "%.*s[]", (int) ZSTR_LEN(element->str), ZSTR_VAL(element->str));
1208 zend_string_release(element->str);
1209 element->str = str;
1210 element->flags = PHPDBG_WATCH_IMPLICIT;
1211 phpdbg_add_bucket_watch_element((Bucket *) orig_zv, element);
1212 element->child = new;
1216 new->parent = element;
1221 static int phpdbg_create_recursive_watchpoint(zval *zv, phpdbg_watch_element *element) { argument
1222 element->flags = PHPDBG_WATCH_RECURSIVE | PHPDBG_WATCH_RECURSIVE_ROOT;
1223 element->child = NULL;
1224 phpdbg_add_bucket_watch_element((Bucket *) zv, element);
1232 phpdbg_watch_element *element = ecalloc(1, sizeof(phpdbg_watch_element)); local
1233 element->str = zend_string_init(name, namelen, 0);
1234 element->name_in_parent = zend_string_init(key, keylen, 0);
1235 element->parent_container = parent;
1236 element->parent = PHPDBG_G(watch_tmp);
1237 element->child = NULL;
1239 ret = info->callback(zv, element);
1245 phpdbg_remove_watch_element(element);
1248 PHPDBG_G(watch_tmp)->child = element;
1251 if (element->child) {
1252 element = element->child;
1254 element->id = PHPDBG_G(watch_elements).nNextFreeElement;
1255 zend_hash_index_add_ptr(&PHPDBG_G(watch_elements), element->id, element);
1257 … for %.*s", (element->flags & PHPDBG_WATCH_RECURSIVE_ROOT) ? " recursive" : "", element->id, (int)…
1270 phpdbg_watch_element *element; local
1279 element = ecalloc(1, sizeof(phpdbg_watch_element));
1280 element->flags = PHPDBG_WATCH_IMPLICIT;
1281 element->str = zend_string_copy(info->str);
1282 element->name_in_parent = zend_string_init(key, keylen, 0);
1283 element->parent_container = parent;
1284 element->parent = PHPDBG_G(watch_tmp);
1285 element = phpdbg_add_bucket_watch_element((Bucket *) zv, element);
1291 PHPDBG_G(watch_tmp)->child = element;
1293 PHPDBG_G(watch_tmp) = element;
1327 phpdbg_watch_element *element; local
1330 if ((element = zend_hash_index_find_ptr(&PHPDBG_G(watch_elements), param->num))) {
1331 phpdbg_remove_watch_element(element);
1415 phpdbg_watch_element *element; local
1420 ZEND_HASH_FOREACH_PTR(&PHPDBG_G(watch_recreation), element) {
1421 phpdbg_automatic_dequeue_free(element);