#define Z_COUNTED_P(zval_p) Z_COUNTED(*(zval_p))
#define Z_TYPE_MASK 0xff
+#define Z_TYPE_FLAGS_MASK 0xff00
#define Z_TYPE_FLAGS_SHIFT 8
/* zval.u1.v.type_flags */
#define IS_TYPE_REFCOUNTED (1<<0)
-#define Z_TYPE_INFO_REFCOUNTED(t) (((t) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)
+#if 1
+/* This optimized version assumes that we have a single "type_flag" */
+# define Z_TYPE_INFO_REFCOUNTED(t) (((t) & Z_TYPE_FLAGS_MASK) != 0)
+#else
+# define Z_TYPE_INFO_REFCOUNTED(t) (((t) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)
+#endif
/* extended types */
#define IS_INTERNED_STRING_EX IS_STRING
#define Z_CONSTANT(zval) (Z_TYPE(zval) == IS_CONSTANT_AST)
#define Z_CONSTANT_P(zval_p) Z_CONSTANT(*(zval_p))
+#if 1
+/* This optimized version assumes that we have a single "type_flag" */
+#define Z_REFCOUNTED(zval) (Z_TYPE_FLAGS(zval) != 0)
+#else
#define Z_REFCOUNTED(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_REFCOUNTED) != 0)
+#endif
#define Z_REFCOUNTED_P(zval_p) Z_REFCOUNTED(*(zval_p))
/* deprecated: (COPYABLE is the same as IS_ARRAY) */