]> granicus.if.org Git - php/commitdiff
Micro optimization
authorDmitry Stogov <dmitry@zend.com>
Mon, 17 Nov 2014 05:36:14 +0000 (08:36 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 17 Nov 2014 05:36:14 +0000 (08:36 +0300)
Zend/zend_execute.c

index 1551789c4811a95c7e72697145fbeb41abe10561..8a8cbbffafb46fe8f7da1a64ab465804a3fe871c 100644 (file)
@@ -456,15 +456,15 @@ static zend_always_inline zval *_get_zval_ptr_ptr_var(uint32_t var, const zend_e
 
        if (EXPECTED(Z_TYPE_P(ret) == IS_INDIRECT)) {
                should_free->var = NULL;
-               return Z_INDIRECT_P(ret);
-       } else if (!Z_REFCOUNTED_P(ret) || Z_REFCOUNT_P(ret) == 1) {
-               should_free->var = ret;
-               return ret;
+               ret = Z_INDIRECT_P(ret);
        } else {
-               Z_DELREF_P(ret);
-               should_free->var = NULL;
-               return ret;
+               should_free->var = ret;
+               if (Z_REFCOUNTED_P(ret) && Z_REFCOUNT_P(ret) > 1) {
+                       should_free->var = NULL;
+                       Z_DELREF_P(ret);
+               }
        }
+       return ret;
 }
 
 static inline zval *_get_zval_ptr_ptr(int op_type, const znode_op *node, const zend_execute_data *execute_data, zend_free_op *should_free, int type TSRMLS_DC)