]> granicus.if.org Git - php/commitdiff
Simplify REFCOUNTED checks
authorDmitry Stogov <dmitry@zend.com>
Fri, 16 Feb 2018 12:37:40 +0000 (15:37 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 16 Feb 2018 12:37:40 +0000 (15:37 +0300)
Zend/zend_types.h

index 2e86a9e97549ecff78d8b7a4df7fe7b5228eb64b..41cdd1c35511a17d081ae0053eff046b68b92aa9 100644 (file)
@@ -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) */