Commit:    b8b3bb08b22a28041f5c02b371a88f231ec510de
Author:    Gustavo Lopes <glo...@nebm.ist.utl.pt>         Tue, 22 Jan 2013 
12:24:33 +0100
Parents:   86c1a26169ce44c9ea48e424b62128ee62f31d59 
aa0adce47d9b8ead59efede63a769e395e27bcd5
Branches:  PHP-5.4 PHP-5.5 master

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

Log:
Merge branch 'bug64023' into PHP-5.4

* bug64023:
  Fix bug #64023 (__toString() & SplFileInfo)

Conflicts:
        Zend/zend_vm_def.h
        Zend/zend_vm_execute.h

Bugs:
https://bugs.php.net/64023

Changed paths:
  MM  Zend/zend_vm_def.h
  MM  Zend/zend_vm_execute.h
  MM  ext/spl/spl_directory.c


Diff:
diff --cc Zend/zend_vm_def.h
index b7fa907,e8d3250..e5cdd1d
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@@ -972,32 -894,16 +972,20 @@@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|
  
  ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMP|VAR|CV, ANY)
  {
 -      zend_op *opline = EX(opline);
 +      USE_OPLINE
        zend_free_op free_op1;
-       zval z_copy;
 -      zval *z = GET_OP1_ZVAL_PTR(BP_VAR_R);
 +      zval *z;
 +
 +      SAVE_OPLINE();
 +      z = GET_OP1_ZVAL_PTR(BP_VAR_R);
  
-       if (OP1_TYPE != IS_CONST &&
-           UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) &&
-           Z_OBJ_HT_P(z)->get_method != NULL) {
-           if (OP1_TYPE == IS_TMP_VAR) {
-               INIT_PZVAL(z);
-           }
-               if (zend_std_cast_object_tostring(z, &z_copy, IS_STRING 
TSRMLS_CC) == SUCCESS) {
-                       zend_print_variable(&z_copy);
-                       zval_dtor(&z_copy);
-               } else {
-                       zend_print_variable(z);
-               }
-       } else {
-               zend_print_variable(z);
+       if (OP1_TYPE == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
+               INIT_PZVAL(z);
        }
+       zend_print_variable(z);
  
        FREE_OP1();
 +      CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
  
diff --cc Zend/zend_vm_execute.h
index 2680d85,f5cedd8..97e5a8e
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@@ -2022,31 -1318,15 +2022,19 @@@ static int ZEND_FASTCALL  ZEND_BOOL_NOT
  
  static int ZEND_FASTCALL  
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
 -      zend_op *opline = EX(opline);
 +      USE_OPLINE
 +
-       zval z_copy;
 +      zval *z;
  
 -      zval *z = &opline->op1.u.constant;
 +      SAVE_OPLINE();
 +      z = opline->op1.zv;
  
-       if (IS_CONST != IS_CONST &&
-           UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) &&
-           Z_OBJ_HT_P(z)->get_method != NULL) {
-           if (IS_CONST == IS_TMP_VAR) {
-               INIT_PZVAL(z);
-           }
-               if (zend_std_cast_object_tostring(z, &z_copy, IS_STRING 
TSRMLS_CC) == SUCCESS) {
-                       zend_print_variable(&z_copy);
-                       zval_dtor(&z_copy);
-               } else {
-                       zend_print_variable(z);
-               }
-       } else {
-               zend_print_variable(z);
+       if (IS_CONST == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
+               INIT_PZVAL(z);
        }
+       zend_print_variable(z);
  
 +      CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
  
@@@ -6441,32 -4622,16 +6429,20 @@@ static int ZEND_FASTCALL  ZEND_BOOL_NOT
  
  static int ZEND_FASTCALL  ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
 -      zend_op *opline = EX(opline);
 +      USE_OPLINE
        zend_free_op free_op1;
-       zval z_copy;
 -      zval *z = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
 +      zval *z;
 +
 +      SAVE_OPLINE();
 +      z = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
  
-       if (IS_TMP_VAR != IS_CONST &&
-           UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) &&
-           Z_OBJ_HT_P(z)->get_method != NULL) {
-           if (IS_TMP_VAR == IS_TMP_VAR) {
-               INIT_PZVAL(z);
-           }
-               if (zend_std_cast_object_tostring(z, &z_copy, IS_STRING 
TSRMLS_CC) == SUCCESS) {
-                       zend_print_variable(&z_copy);
-                       zval_dtor(&z_copy);
-               } else {
-                       zend_print_variable(z);
-               }
-       } else {
-               zend_print_variable(z);
+       if (IS_TMP_VAR == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
+               INIT_PZVAL(z);
        }
+       zend_print_variable(z);
  
        zval_dtor(free_op1.var);
 +      CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
  
@@@ -10759,32 -7874,16 +10735,20 @@@ static int ZEND_FASTCALL  ZEND_POST_DEC
  
  static int ZEND_FASTCALL  ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
 -      zend_op *opline = EX(opline);
 +      USE_OPLINE
        zend_free_op free_op1;
-       zval z_copy;
 -      zval *z = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
 +      zval *z;
 +
 +      SAVE_OPLINE();
 +      z = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
  
-       if (IS_VAR != IS_CONST &&
-           UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) &&
-           Z_OBJ_HT_P(z)->get_method != NULL) {
-           if (IS_VAR == IS_TMP_VAR) {
-               INIT_PZVAL(z);
-           }
-               if (zend_std_cast_object_tostring(z, &z_copy, IS_STRING 
TSRMLS_CC) == SUCCESS) {
-                       zend_print_variable(&z_copy);
-                       zval_dtor(&z_copy);
-               } else {
-                       zend_print_variable(z);
-               }
-       } else {
-               zend_print_variable(z);
+       if (IS_VAR == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
+               INIT_PZVAL(z);
        }
+       zend_print_variable(z);
  
        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
 +      CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
  
@@@ -26737,42 -21912,34 +26701,30 @@@ static int ZEND_FASTCALL  ZEND_POST_DEC
        ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  
ZEND_FETCH_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static int ZEND_FASTCALL  ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
 -      return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_R, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 -}
 +      USE_OPLINE
  
-       zval z_copy;
 -static int ZEND_FASTCALL  
ZEND_FETCH_W_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 -{
 -      return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_W, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 -}
 +      zval *z;
  
 -static int ZEND_FASTCALL  
ZEND_FETCH_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 -{
 -      return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_RW, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 -}
 +      SAVE_OPLINE();
 +      z = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
  
-       if (IS_CV != IS_CONST &&
-           UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) &&
-           Z_OBJ_HT_P(z)->get_method != NULL) {
-           if (IS_CV == IS_TMP_VAR) {
-               INIT_PZVAL(z);
-           }
-               if (zend_std_cast_object_tostring(z, &z_copy, IS_STRING 
TSRMLS_CC) == SUCCESS) {
-                       zend_print_variable(&z_copy);
-                       zval_dtor(&z_copy);
-               } else {
-                       zend_print_variable(z);
-               }
-       } else {
-               zend_print_variable(z);
 -static int ZEND_FASTCALL  
ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 -{
 -      return 
zend_fetch_var_address_helper_SPEC_CV(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), 
EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 -}
++      if (IS_CV == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
++              INIT_PZVAL(z);
 +      }
++      zend_print_variable(z);
  
 -static int ZEND_FASTCALL  
ZEND_FETCH_UNSET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 -{
 -      return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_UNSET, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  
ZEND_FETCH_IS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static int ZEND_FASTCALL  ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
 -      return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_IS, 
ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 +      USE_OPLINE
 +
 +      ZVAL_LONG(&EX_T(opline->result.var).tmp_var, 1);
 +      return ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  }
  
  static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)


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

Reply via email to