From 25e0413de1be7cd2e7a286e94dde81c57d72013a Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 16 Feb 2018 15:37:40 +0300 Subject: [PATCH] Simplify REFCOUNTED checks --- Zend/zend_types.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 2e86a9e975..41cdd1c355 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -435,6 +435,7 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #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 @@ -478,7 +479,12 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { /* 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 @@ -531,7 +537,12 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #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) */ -- 2.50.1