#endif
/* GC_INFO layout */
-#define GC_ADDRESS 0x0fffff
-#define GC_COLOR 0x300000
+#define GC_ADDRESS 0x0fffffu
+#define GC_COLOR 0x300000u
-#define GC_BLACK 0x000000 /* must be zero */
-#define GC_WHITE 0x100000
-#define GC_GREY 0x200000
-#define GC_PURPLE 0x300000
+#define GC_BLACK 0x000000u /* must be zero */
+#define GC_WHITE 0x100000u
+#define GC_GREY 0x200000u
+#define GC_PURPLE 0x300000u
+ /* Debug tracing */
+ #if ZEND_GC_DEBUG > 1
+ # define GC_TRACE(format, ...) fprintf(stderr, format "\n", ##__VA_ARGS__);
+ # define GC_TRACE_REF(ref, format, ...) \
+ do { \
+ gc_trace_ref((zend_refcounted *) ref); \
+ fprintf(stderr, format "\n", ##__VA_ARGS__); \
+ } while (0)
+ # define GC_TRACE_SET_COLOR(ref, color) \
+ GC_TRACE_REF(ref, "->%s", gc_color_name(color))
+ #else
+ # define GC_TRACE_REF(ref, format, ...)
+ # define GC_TRACE_SET_COLOR(ref, new_color)
+ # define GC_TRACE(str)
+ #endif
+
/* GC_INFO access */
#define GC_REF_ADDRESS(ref) \
(((GC_TYPE_INFO(ref)) & (GC_ADDRESS << GC_INFO_SHIFT)) >> GC_INFO_SHIFT)