]> granicus.if.org Git - php/commitdiff
Small call/return improvement
authorDmitry Stogov <dmitry@zend.com>
Mon, 16 Jun 2014 09:25:23 +0000 (13:25 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 16 Jun 2014 09:25:23 +0000 (13:25 +0400)
Zend/zend_execute.c
Zend/zend_execute.h

index de52545353800635fe880bee413074bef16a6dd6..2044557bd8b95cd79ab06ec2dc580d90db885674 100644 (file)
@@ -1495,12 +1495,14 @@ void zend_clean_and_cache_symbol_table(zend_array *symbol_table TSRMLS_DC) /* {{
 
 static zend_always_inline void i_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */
 {
-       zval *cv = EX_VAR_NUM(0);
-       zval *end = cv + EX(op_array)->last_var;
-       while (cv != end) {
-               zval_ptr_dtor(cv);
-               cv++;
-       }
+       if (EXPECTED(EX(op_array)->last_var > 0)) {
+               zval *cv = EX_VAR_NUM(0);
+               zval *end = cv + EX(op_array)->last_var;
+               do {
+                       zval_ptr_dtor(cv);
+                       cv++;
+               } while (cv != end);
+       }
 }
 /* }}} */
 
index 623d3a80311fd9dca1b0c83b044b8c36bc4bc1e0..1b74564dfdf79317905f5baff009c3bea1f159b0 100644 (file)
@@ -253,11 +253,14 @@ static zend_always_inline void zend_vm_stack_free(void *ptr TSRMLS_DC)
 static zend_always_inline void zend_vm_stack_clear_multiple(int nested TSRMLS_DC)
 {
        zval *p = EG(argument_stack)->top - 1;
-       zval *end = p - Z_LVAL_P(p);
 
-       while (p != end) {
-               p--;
-               i_zval_ptr_dtor_nogc(p ZEND_FILE_LINE_CC TSRMLS_CC);
+       if (EXPECTED(Z_LVAL_P(p) > 0)) {
+               zval *end = p - Z_LVAL_P(p);
+
+               do {
+                       p--;
+                       i_zval_ptr_dtor_nogc(p ZEND_FILE_LINE_CC TSRMLS_CC);
+               } while (p != end);
        }
        if (nested) {
                EG(argument_stack)->top = p;