Commit:    ab22fda7e52f097297f1dcdf06f474cea858adc0
Author:    Xinchen Hui <larue...@php.net>         Sun, 9 Jun 2013 13:35:45 +0800
Parents:   a7e25bdd486c28958c2db2f28c9fda63bb938405 
e8f004d54252e0130b88131bdc46a41ed365c51e
Branches:  PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=ab22fda7e52f097297f1dcdf06f474cea858adc0

Log:
Merge branch 'PHP-5.3' into PHP-5.4

Changed paths:
  MM  Zend/zend_vm_def.h
  MM  Zend/zend_vm_execute.h


Diff:
diff --cc Zend/zend_vm_def.h
index eed65e3,d471f39..40e2e42
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@@ -2682,27 -2325,26 +2682,29 @@@ ZEND_VM_HELPER(zend_do_fcall_common_hel
                        }
  
                        if (!RETURN_VALUE_USED(opline)) {
 -                              
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
 +                              zval_ptr_dtor(&ret->var.ptr);
                        }
+               } else if (RETURN_VALUE_USED(opline)) {
+                       EX_T(opline->result.u.var).var.ptr = NULL;
                }
 -      } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
 +      } else if (fbc->type == ZEND_USER_FUNCTION) {
                EX(original_return_value) = EG(return_value_ptr_ptr);
                EG(active_symbol_table) = NULL;
 -              EG(active_op_array) = &EX(function_state).function->op_array;
 +              EG(active_op_array) = &fbc->op_array;
                EG(return_value_ptr_ptr) = NULL;
 -              if (RETURN_VALUE_USED(opline)) {                        
 -                      EG(return_value_ptr_ptr) = 
&EX_T(opline->result.u.var).var.ptr;
 -                      EX_T(opline->result.u.var).var.ptr = NULL;
 -                      EX_T(opline->result.u.var).var.ptr_ptr = 
&EX_T(opline->result.u.var).var.ptr;
 -                      EX_T(opline->result.u.var).var.fcall_returned_reference 
= EX(function_state).function->common.return_reference;
 +              if (RETURN_VALUE_USED(opline)) {
 +                      temp_variable *ret = &EX_T(opline->result.var);
 +
 +                      ret->var.ptr = NULL;
 +                      EG(return_value_ptr_ptr) = &ret->var.ptr;
 +                      ret->var.ptr_ptr = &ret->var.ptr;
 +                      ret->var.fcall_returned_reference = 
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
                }
  
 -              if (zend_execute == execute && !EG(exception)) {
 -                      EX(call_opline) = opline;
 -                      ZEND_VM_ENTER();
 +              if (EXPECTED(zend_execute == execute)) {
 +                      if (EXPECTED(EG(exception) == NULL)) {
 +                              ZEND_VM_ENTER();
 +                      }
                } else {
                        zend_execute(EG(active_op_array) TSRMLS_CC);
                }
diff --cc Zend/zend_vm_execute.h
index 18b3f47,993b822..ad6d708
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@@ -646,27 -325,26 +646,29 @@@ static int ZEND_FASTCALL zend_do_fcall_
                        }
  
                        if (!RETURN_VALUE_USED(opline)) {
 -                              
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
 +                              zval_ptr_dtor(&ret->var.ptr);
                        }
+               } else if (RETURN_VALUE_USED(opline)) {
+                       EX_T(opline->result.u.var).var.ptr = NULL;
                }
 -      } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
 +      } else if (fbc->type == ZEND_USER_FUNCTION) {
                EX(original_return_value) = EG(return_value_ptr_ptr);
                EG(active_symbol_table) = NULL;
 -              EG(active_op_array) = &EX(function_state).function->op_array;
 +              EG(active_op_array) = &fbc->op_array;
                EG(return_value_ptr_ptr) = NULL;
                if (RETURN_VALUE_USED(opline)) {
 -                      EG(return_value_ptr_ptr) = 
&EX_T(opline->result.u.var).var.ptr;
 -                      EX_T(opline->result.u.var).var.ptr = NULL;
 -                      EX_T(opline->result.u.var).var.ptr_ptr = 
&EX_T(opline->result.u.var).var.ptr;
 -                      EX_T(opline->result.u.var).var.fcall_returned_reference 
= EX(function_state).function->common.return_reference;
 +                      temp_variable *ret = &EX_T(opline->result.var);
 +
 +                      ret->var.ptr = NULL;
 +                      EG(return_value_ptr_ptr) = &ret->var.ptr;
 +                      ret->var.ptr_ptr = &ret->var.ptr;
 +                      ret->var.fcall_returned_reference = 
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
                }
  
 -              if (zend_execute == execute && !EG(exception)) {
 -                      EX(call_opline) = opline;
 -                      ZEND_VM_ENTER();
 +              if (EXPECTED(zend_execute == execute)) {
 +                      if (EXPECTED(EG(exception) == NULL)) {
 +                              ZEND_VM_ENTER();
 +                      }
                } else {
                        zend_execute(EG(active_op_array) TSRMLS_CC);
                }


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

Reply via email to