From: Marcus Boerger Date: Thu, 11 Jan 2007 22:35:36 +0000 (+0000) Subject: - MFB Missing part of __toString() support X-Git-Tag: RELEASE_1_0_0RC1~297 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbcda92dc5600f2ac0a598e109bbeb0bc2750df9;p=php - MFB Missing part of __toString() support --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 14f5297797..0505eab3dd 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -885,6 +885,7 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMP|VAR|CV, ANY) zend_op *opline = EX(opline); zend_free_op free_op1; zval *z = GET_OP1_ZVAL_PTR(BP_VAR_R); + zval z_copy; UErrorCode status = U_ZERO_ERROR; /* UTODO: review this @@ -906,6 +907,10 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMP|VAR|CV, ANY) } zval_dtor(&z_conv); ucnv_close(script_enc_conv); + } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && + zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { + zend_print_variable(&z_copy); + zval_dtor(&z_copy); } else { zend_print_variable(z); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index da59e3c46d..68b5b11531 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1384,6 +1384,7 @@ static int ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_op *opline = EX(opline); zval *z = &opline->op1.u.constant; + zval z_copy; UErrorCode status = U_ZERO_ERROR; /* UTODO: review this @@ -1405,6 +1406,10 @@ static int ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } zval_dtor(&z_conv); ucnv_close(script_enc_conv); + } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && + zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { + zend_print_variable(&z_copy); + zval_dtor(&z_copy); } else { zend_print_variable(z); } @@ -3992,6 +3997,7 @@ static int ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_op *opline = EX(opline); zend_free_op free_op1; zval *z = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); + zval z_copy; UErrorCode status = U_ZERO_ERROR; /* UTODO: review this @@ -4013,6 +4019,10 @@ static int ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } zval_dtor(&z_conv); ucnv_close(script_enc_conv); + } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && + zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { + zend_print_variable(&z_copy); + zval_dtor(&z_copy); } else { zend_print_variable(z); } @@ -7108,6 +7118,7 @@ static int ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_op *opline = EX(opline); zend_free_op free_op1; zval *z = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); + zval z_copy; UErrorCode status = U_ZERO_ERROR; /* UTODO: review this @@ -7129,6 +7140,10 @@ static int ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } zval_dtor(&z_conv); ucnv_close(script_enc_conv); + } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && + zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { + zend_print_variable(&z_copy); + zval_dtor(&z_copy); } else { zend_print_variable(z); } @@ -19686,6 +19701,7 @@ static int ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_op *opline = EX(opline); zval *z = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); + zval z_copy; UErrorCode status = U_ZERO_ERROR; /* UTODO: review this @@ -19707,6 +19723,10 @@ static int ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } zval_dtor(&z_conv); ucnv_close(script_enc_conv); + } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && + zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { + zend_print_variable(&z_copy); + zval_dtor(&z_copy); } else { zend_print_variable(z); }