]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorDmitry Stogov <dmitry@zend.com>
Wed, 29 May 2019 10:59:01 +0000 (13:59 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 29 May 2019 10:59:01 +0000 (13:59 +0300)
* PHP-7.4:
  zend_assign_to_variable() optimization

1  2 
Zend/zend_execute.c
Zend/zend_execute.h

Simple merge
index e34c56def2cbc3442f7bfb08fd0e050c3fb92d9c,b75aa0a2ad3c73ab914ea8fe840323abda9657c5..053d22afd0c0dd61460596a4e65a870377d0f322
@@@ -116,23 -123,13 +123,8 @@@ static zend_always_inline zval* zend_as
                                        break;
                                }
                        }
 -                      if (Z_TYPE_P(variable_ptr) == IS_OBJECT &&
 -                      UNEXPECTED(Z_OBJ_HANDLER_P(variable_ptr, set) != NULL)) {
 -                              Z_OBJ_HANDLER_P(variable_ptr, set)(variable_ptr, value);
 -                              return variable_ptr;
 -                      }
                        garbage = Z_COUNTED_P(variable_ptr);
-                       ZVAL_COPY_VALUE(variable_ptr, value);
-                       if (ZEND_CONST_COND(value_type  == IS_CONST, 0)) {
-                               if (UNEXPECTED(Z_OPT_REFCOUNTED_P(variable_ptr))) {
-                                       Z_ADDREF_P(variable_ptr);
-                               }
-                       } else if (value_type & (IS_CONST|IS_CV)) {
-                               if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
-                                       Z_ADDREF_P(variable_ptr);
-                               }
-                       } else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) {
-                               if (UNEXPECTED(GC_DELREF(ref) == 0)) {
-                                       efree_size(ref, sizeof(zend_reference));
-                               } else if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
-                                       Z_ADDREF_P(variable_ptr);
-                               }
-                       }
+                       zend_copy_to_variable(variable_ptr, value, value_type, ref);
                        if (GC_DELREF(garbage) == 0) {
                                rc_dtor_func(garbage);
                        } else { /* we need to split */