dmitry                                   Tue, 10 Aug 2010 14:43:17 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=302074

Log:
Optimization

Changed paths:
    U   php/php-src/trunk/Zend/zend_execute.c

Modified: php/php-src/trunk/Zend/zend_execute.c
===================================================================
--- php/php-src/trunk/Zend/zend_execute.c       2010-08-10 13:51:41 UTC (rev 
302073)
+++ php/php-src/trunk/Zend/zend_execute.c       2010-08-10 14:43:17 UTC (rev 
302074)
@@ -819,7 +819,6 @@
 static inline zval* zend_assign_tmp_to_variable(zval **variable_ptr_ptr, zval 
*value TSRMLS_DC)
 {
        zval *variable_ptr = *variable_ptr_ptr;
-       zval garbage;

        if (Z_TYPE_P(variable_ptr) == IS_OBJECT &&
            UNEXPECTED(Z_OBJ_HANDLER_P(variable_ptr, set) != NULL)) {
@@ -828,12 +827,12 @@
        }

        if (EXPECTED(!PZVAL_IS_REF(variable_ptr))) {
-               if (Z_DELREF_P(variable_ptr)==0) {
-                       ZVAL_COPY_VALUE(&garbage, variable_ptr);
-                       INIT_PZVAL_COPY(variable_ptr, value);
-                       zendi_zval_dtor(garbage);
+               if (Z_REFCOUNT_P(variable_ptr)==1) {
+                       zendi_zval_dtor(*variable_ptr);
+                       ZVAL_COPY_VALUE(variable_ptr, value);
                        return variable_ptr;
                } else { /* we need to split */
+                       Z_DELREF_P(variable_ptr);
                        GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
                        ALLOC_ZVAL(variable_ptr);
                        INIT_PZVAL_COPY(variable_ptr, value);
@@ -841,11 +840,8 @@
                        return variable_ptr;
                }
        } else {
-               if (EXPECTED(variable_ptr != value)) {
-                       ZVAL_COPY_VALUE(&garbage, variable_ptr);
-                       ZVAL_COPY_VALUE(variable_ptr, value);
-                       zendi_zval_dtor(garbage);
-               }
+               zendi_zval_dtor(*variable_ptr);
+               ZVAL_COPY_VALUE(variable_ptr, value);
                return variable_ptr;
        }
 }
@@ -863,17 +859,17 @@
        }

        if (EXPECTED(!PZVAL_IS_REF(variable_ptr))) {
-               if (Z_DELREF_P(variable_ptr)==0) {
+               if (Z_REFCOUNT_P(variable_ptr)==1) {
                        if (variable_ptr==value) {
-                               Z_ADDREF_P(variable_ptr);
                                return variable_ptr;
                        } else if (PZVAL_IS_REF(value)) {
                                ZVAL_COPY_VALUE(&garbage, variable_ptr);
-                               INIT_PZVAL_COPY(variable_ptr, value);
+                               ZVAL_COPY_VALUE(variable_ptr, value);
                                zval_copy_ctor(variable_ptr);
                                zendi_zval_dtor(garbage);
                                return variable_ptr;
                        } else {
+                               Z_DELREF_P(variable_ptr);
                                Z_ADDREF_P(value);
                                *variable_ptr_ptr = value;
                                if (variable_ptr != &EG(uninitialized_zval)) {
@@ -884,6 +880,7 @@
                                return value;
                        }
                } else { /* we need to split */
+                       Z_DELREF_P(variable_ptr);
                        GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
                        if (PZVAL_IS_REF(value) && Z_REFCOUNT_P(value) > 0) {
                                ALLOC_ZVAL(variable_ptr);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to