Lines Matching refs:ref
93 # define GC_TRACE_REF(ref, format, ...) \ argument
95 gc_trace_ref((zend_refcounted *) ref); \
98 # define GC_TRACE_SET_COLOR(ref, color) \ argument
99 GC_TRACE_REF(ref, "->%s", gc_color_name(color))
101 # define GC_TRACE_REF(ref, format, ...) argument
102 # define GC_TRACE_SET_COLOR(ref, new_color) argument
107 #define GC_REF_ADDRESS(ref) \ argument
108 (((GC_TYPE_INFO(ref)) & (GC_ADDRESS << GC_INFO_SHIFT)) >> GC_INFO_SHIFT)
110 #define GC_REF_COLOR(ref) \ argument
111 (((GC_TYPE_INFO(ref)) & (GC_COLOR << GC_INFO_SHIFT)) >> GC_INFO_SHIFT)
113 #define GC_REF_CHECK_COLOR(ref, color) \ argument
114 ((GC_TYPE_INFO(ref) & (GC_COLOR << GC_INFO_SHIFT)) == ((color) << GC_INFO_SHIFT))
116 #define GC_REF_SET_INFO(ref, info) do { \ argument
117 GC_TYPE_INFO(ref) = \
118 (GC_TYPE_INFO(ref) & (GC_TYPE_MASK | GC_FLAGS_MASK)) | \
122 #define GC_REF_SET_COLOR(ref, c) do { \ argument
123 GC_TRACE_SET_COLOR(ref, c); \
124 GC_TYPE_INFO(ref) = \
125 (GC_TYPE_INFO(ref) & ~(GC_COLOR << GC_INFO_SHIFT)) | \
129 #define GC_REF_SET_BLACK(ref) do { \ argument
130 GC_TRACE_SET_COLOR(ref, GC_BLACK); \
131 GC_TYPE_INFO(ref) &= ~(GC_COLOR << GC_INFO_SHIFT); \
134 #define GC_REF_SET_PURPLE(ref) do { \ argument
135 GC_TRACE_SET_COLOR(ref, GC_PURPLE); \
136 GC_TYPE_INFO(ref) |= (GC_COLOR << GC_INFO_SHIFT); \
207 zend_refcounted *ref; member
275 #define GC_STACK_PUSH(ref) \ argument
276 gc_stack_push(&_stack, &_top, ref);
292 static zend_always_inline void gc_stack_push(gc_stack **stack, size_t *top, zend_refcounted *ref) in gc_stack_push() argument
298 (*stack)->data[(*top)++] = ref; in gc_stack_push()
335 static zend_always_inline gc_root_buffer* gc_decompress(zend_refcounted *ref, uint32_t idx) in gc_decompress() argument
339 if (EXPECTED(GC_GET_PTR(root->ref) == ref)) { in gc_decompress()
347 if (GC_GET_PTR(root->ref) == ref) { in gc_decompress()
361 ZEND_ASSERT(GC_IS_UNUSED(root->ref)); in gc_fetch_unused()
362 GC_G(unused) = GC_LIST2IDX(root->ref); in gc_fetch_unused()
368 root->ref = GC_IDX2LIST(GC_G(unused)); in gc_link_unused()
392 static void gc_trace_ref(zend_refcounted *ref) { in gc_trace_ref() argument
393 if (GC_TYPE(ref) == IS_OBJECT) { in gc_trace_ref()
394 zend_object *obj = (zend_object *) ref; in gc_trace_ref()
396 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
397 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
399 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_trace_ref()
400 zend_array *arr = (zend_array *) ref; in gc_trace_ref()
402 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
403 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
407 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
408 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
409 GC_TYPE(ref) == IS_REFERENCE in gc_trace_ref()
410 ? "reference" : zend_get_type_by_const(GC_TYPE(ref))); in gc_trace_ref()
503 GC_G(buf)[0].ref = NULL; in gc_enable()
583 static zend_never_inline void ZEND_FASTCALL gc_possible_root_when_full(zend_refcounted *ref) in gc_possible_root_when_full() argument
588 ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT); in gc_possible_root_when_full()
589 ZEND_ASSERT(GC_INFO(ref) == 0); in gc_possible_root_when_full()
592 GC_ADDREF(ref); in gc_possible_root_when_full()
594 if (UNEXPECTED(GC_DELREF(ref)) == 0) { in gc_possible_root_when_full()
595 rc_dtor_func(ref); in gc_possible_root_when_full()
597 } else if (UNEXPECTED(GC_INFO(ref))) { in gc_possible_root_when_full()
615 newRoot->ref = ref; /* GC_ROOT tag is 0 */ in gc_possible_root_when_full()
616 GC_TRACE_SET_COLOR(ref, GC_PURPLE); in gc_possible_root_when_full()
619 GC_REF_SET_INFO(ref, idx | GC_PURPLE); in gc_possible_root_when_full()
627 ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref) in gc_possible_root() argument
643 gc_possible_root_when_full(ref); in gc_possible_root()
647 ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT); in gc_possible_root()
648 ZEND_ASSERT(GC_INFO(ref) == 0); in gc_possible_root()
651 newRoot->ref = ref; /* GC_ROOT tag is 0 */ in gc_possible_root()
652 GC_TRACE_SET_COLOR(ref, GC_PURPLE); in gc_possible_root()
655 GC_REF_SET_INFO(ref, idx | GC_PURPLE); in gc_possible_root()
663 static zend_never_inline void ZEND_FASTCALL gc_remove_compressed(zend_refcounted *ref, uint32_t idx) in gc_remove_compressed() argument
665 gc_root_buffer *root = gc_decompress(ref, idx); in gc_remove_compressed()
669 ZEND_API void ZEND_FASTCALL gc_remove_from_buffer(zend_refcounted *ref) in gc_remove_from_buffer() argument
672 uint32_t idx = GC_REF_ADDRESS(ref); in gc_remove_from_buffer()
676 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_remove_from_buffer()
677 GC_TRACE_SET_COLOR(ref, GC_BLACK); in gc_remove_from_buffer()
679 GC_REF_SET_INFO(ref, 0); in gc_remove_from_buffer()
683 gc_remove_compressed(ref, idx); in gc_remove_from_buffer()
692 static void gc_scan_black(zend_refcounted *ref, gc_stack *stack) in gc_scan_black() argument
701 if (GC_TYPE(ref) == IS_OBJECT) { in gc_scan_black()
702 zend_object *obj = (zend_object*)ref; in gc_scan_black()
704 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_scan_black()
717 ref = Z_COUNTED_P(zv); in gc_scan_black()
718 GC_ADDREF(ref); in gc_scan_black()
719 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
720 GC_REF_SET_BLACK(ref); in gc_scan_black()
721 GC_STACK_PUSH(ref); in gc_scan_black()
733 ref = Z_COUNTED_P(zv); in gc_scan_black()
734 GC_ADDREF(ref); in gc_scan_black()
735 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
736 GC_REF_SET_BLACK(ref); in gc_scan_black()
740 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan_black() local
741 GC_ADDREF(ref); in gc_scan_black()
742 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
743 GC_REF_SET_BLACK(ref); in gc_scan_black()
744 GC_STACK_PUSH(ref); in gc_scan_black()
755 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_scan_black()
756 ZEND_ASSERT((zend_array*)ref != &EG(symbol_table)); in gc_scan_black()
757 ht = (zend_array*)ref; in gc_scan_black()
772 ref = Z_COUNTED_P(zv); in gc_scan_black()
773 GC_ADDREF(ref); in gc_scan_black()
774 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
775 GC_REF_SET_BLACK(ref); in gc_scan_black()
783 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan_black() local
784 GC_ADDREF(ref); in gc_scan_black()
785 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
786 GC_REF_SET_BLACK(ref); in gc_scan_black()
787 GC_STACK_PUSH(ref); in gc_scan_black()
797 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_scan_black()
798 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_scan_black()
799 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_scan_black()
800 GC_ADDREF(ref); in gc_scan_black()
801 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
802 GC_REF_SET_BLACK(ref); in gc_scan_black()
808 ref = GC_STACK_POP(); in gc_scan_black()
809 if (ref) { in gc_scan_black()
814 static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) in gc_mark_grey() argument
825 if (GC_TYPE(ref) == IS_OBJECT) { in gc_mark_grey()
826 zend_object *obj = (zend_object*)ref; in gc_mark_grey()
828 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_mark_grey()
841 ref = Z_COUNTED_P(zv); in gc_mark_grey()
842 GC_DELREF(ref); in gc_mark_grey()
843 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
844 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
845 GC_STACK_PUSH(ref); in gc_mark_grey()
856 ref = Z_COUNTED_P(zv); in gc_mark_grey()
857 GC_DELREF(ref); in gc_mark_grey()
858 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
859 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
863 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_mark_grey() local
864 GC_DELREF(ref); in gc_mark_grey()
865 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
866 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
867 GC_STACK_PUSH(ref); in gc_mark_grey()
878 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_mark_grey()
879 ZEND_ASSERT(((zend_array*)ref) != &EG(symbol_table)); in gc_mark_grey()
880 ht = (zend_array*)ref; in gc_mark_grey()
895 ref = Z_COUNTED_P(zv); in gc_mark_grey()
896 GC_DELREF(ref); in gc_mark_grey()
897 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
898 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
906 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_mark_grey() local
907 GC_DELREF(ref); in gc_mark_grey()
908 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
909 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
910 GC_STACK_PUSH(ref); in gc_mark_grey()
920 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_mark_grey()
921 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_mark_grey()
922 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_mark_grey()
923 GC_DELREF(ref); in gc_mark_grey()
924 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
925 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
931 ref = GC_STACK_POP(); in gc_mark_grey()
932 if (ref) { in gc_mark_grey()
949 while (!GC_IS_UNUSED(free->ref)) { in gc_compact()
952 while (GC_IS_UNUSED(scan->ref)) { in gc_compact()
956 p = scan->ref; in gc_compact()
957 free->ref = p; in gc_compact()
983 if (GC_IS_ROOT(current->ref)) { in gc_mark_roots()
984 if (GC_REF_CHECK_COLOR(current->ref, GC_PURPLE)) { in gc_mark_roots()
985 GC_REF_SET_COLOR(current->ref, GC_GREY); in gc_mark_roots()
986 gc_mark_grey(current->ref, stack); in gc_mark_roots()
993 static void gc_scan(zend_refcounted *ref, gc_stack *stack) in gc_scan() argument
1002 if (!GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_scan()
1006 if (GC_REFCOUNT(ref) > 0) { in gc_scan()
1007 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan()
1008 GC_REF_SET_BLACK(ref); in gc_scan()
1014 gc_scan_black(ref, _stack->next); in gc_scan()
1020 if (GC_TYPE(ref) == IS_OBJECT) { in gc_scan()
1021 zend_object *obj = (zend_object*)ref; in gc_scan()
1022 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_scan()
1035 ref = Z_COUNTED_P(zv); in gc_scan()
1036 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1037 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1038 GC_STACK_PUSH(ref); in gc_scan()
1050 ref = Z_COUNTED_P(zv); in gc_scan()
1051 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1052 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1056 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan() local
1057 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1058 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1059 GC_STACK_PUSH(ref); in gc_scan()
1070 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_scan()
1071 ht = (HashTable *)ref; in gc_scan()
1088 ref = Z_COUNTED_P(zv); in gc_scan()
1089 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1090 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1098 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan() local
1099 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1100 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1101 GC_STACK_PUSH(ref); in gc_scan()
1111 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_scan()
1112 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_scan()
1113 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_scan()
1114 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1115 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1122 ref = GC_STACK_POP(); in gc_scan()
1123 if (ref) { in gc_scan()
1134 if (GC_IS_ROOT(current->ref)) { in gc_scan_roots()
1135 if (GC_REF_CHECK_COLOR(current->ref, GC_GREY)) { in gc_scan_roots()
1136 GC_REF_SET_COLOR(current->ref, GC_WHITE); in gc_scan_roots()
1137 gc_scan(current->ref, stack); in gc_scan_roots()
1144 static void gc_add_garbage(zend_refcounted *ref) in gc_add_garbage() argument
1162 buf->ref = GC_MAKE_GARBAGE(ref); in gc_add_garbage()
1165 GC_REF_SET_INFO(ref, idx | GC_BLACK); in gc_add_garbage()
1169 static int gc_collect_white(zend_refcounted *ref, uint32_t *flags, gc_stack *stack) in gc_collect_white() argument
1180 if (GC_TYPE(ref) != IS_REFERENCE) { in gc_collect_white()
1184 if (GC_TYPE(ref) == IS_OBJECT) { in gc_collect_white()
1185 zend_object *obj = (zend_object*)ref; in gc_collect_white()
1187 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_collect_white()
1192 if (!GC_INFO(ref)) { in gc_collect_white()
1193 gc_add_garbage(ref); in gc_collect_white()
1209 ref = Z_COUNTED_P(zv); in gc_collect_white()
1210 GC_ADDREF(ref); in gc_collect_white()
1211 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1212 GC_REF_SET_BLACK(ref); in gc_collect_white()
1213 GC_STACK_PUSH(ref); in gc_collect_white()
1225 ref = Z_COUNTED_P(zv); in gc_collect_white()
1226 GC_ADDREF(ref); in gc_collect_white()
1227 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1228 GC_REF_SET_BLACK(ref); in gc_collect_white()
1232 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_collect_white() local
1233 GC_ADDREF(ref); in gc_collect_white()
1234 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1235 GC_REF_SET_BLACK(ref); in gc_collect_white()
1236 GC_STACK_PUSH(ref); in gc_collect_white()
1247 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_collect_white()
1249 if (!GC_INFO(ref)) { in gc_collect_white()
1250 gc_add_garbage(ref); in gc_collect_white()
1252 ht = (zend_array*)ref; in gc_collect_white()
1268 ref = Z_COUNTED_P(zv); in gc_collect_white()
1269 GC_ADDREF(ref); in gc_collect_white()
1270 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1271 GC_REF_SET_BLACK(ref); in gc_collect_white()
1279 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_collect_white() local
1280 GC_ADDREF(ref); in gc_collect_white()
1281 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1282 GC_REF_SET_BLACK(ref); in gc_collect_white()
1283 GC_STACK_PUSH(ref); in gc_collect_white()
1293 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_collect_white()
1294 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_collect_white()
1295 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_collect_white()
1296 GC_ADDREF(ref); in gc_collect_white()
1297 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1298 GC_REF_SET_BLACK(ref); in gc_collect_white()
1304 ref = GC_STACK_POP(); in gc_collect_white()
1305 if (ref) { in gc_collect_white()
1315 zend_refcounted *ref; in gc_collect_roots() local
1322 if (GC_IS_ROOT(current->ref)) { in gc_collect_roots()
1323 if (GC_REF_CHECK_COLOR(current->ref, GC_BLACK)) { in gc_collect_roots()
1324 GC_REF_SET_INFO(current->ref, 0); /* reset GC_ADDRESS() and keep GC_BLACK */ in gc_collect_roots()
1339 ref = current->ref; in gc_collect_roots()
1340 ZEND_ASSERT(GC_IS_ROOT(ref)); in gc_collect_roots()
1341 current->ref = GC_MAKE_GARBAGE(ref); in gc_collect_roots()
1342 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_roots()
1343 GC_REF_SET_BLACK(ref); in gc_collect_roots()
1344 count += gc_collect_white(ref, flags, stack); in gc_collect_roots()
1352 static int gc_remove_nested_data_from_buffer(zend_refcounted *ref, gc_root_buffer *root, gc_stack *… in gc_remove_nested_data_from_buffer() argument
1365 } else if (GC_REF_ADDRESS(ref) != 0 in gc_remove_nested_data_from_buffer()
1366 && GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_remove_nested_data_from_buffer()
1367 GC_TRACE_REF(ref, "removing from buffer"); in gc_remove_nested_data_from_buffer()
1368 GC_REMOVE_FROM_BUFFER(ref); in gc_remove_nested_data_from_buffer()
1370 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_remove_nested_data_from_buffer()
1371 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_remove_nested_data_from_buffer()
1372 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_remove_nested_data_from_buffer()
1380 if (GC_TYPE(ref) == IS_OBJECT) { in gc_remove_nested_data_from_buffer()
1381 zend_object *obj = (zend_object*)ref; in gc_remove_nested_data_from_buffer()
1383 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_remove_nested_data_from_buffer()
1393 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1394 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1408 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1412 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer() local
1413 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1422 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_remove_nested_data_from_buffer()
1423 ht = (zend_array*)ref; in gc_remove_nested_data_from_buffer()
1439 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1447 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer() local
1448 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1459 ref = GC_STACK_POP(); in gc_remove_nested_data_from_buffer()
1460 if (ref) { in gc_remove_nested_data_from_buffer()
1538 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1539 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1544 current->ref = GC_MAKE_DTOR_GARBAGE(obj); in zend_gc_collect_cycles()
1561 if (GC_IS_DTOR_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1562 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1576 if (GC_IS_DTOR_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1577 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1580 current->ref = p; in zend_gc_collect_cycles()
1610 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1611 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1620 current->ref = GC_MAKE_GARBAGE(((char*)obj) - obj->handlers->offset); in zend_gc_collect_cycles()
1648 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1649 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()