helly Sun May 21 12:38:28 2006 UTC
Modified files:
/ZendEngine2 zend_execute.c
/php-src/tests/lang bug24658.phpt
Log:
- Improve error messages (part 2)
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_execute.c?r1=1.743&r2=1.744&diff_format=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.743 ZendEngine2/zend_execute.c:1.744
--- ZendEngine2/zend_execute.c:1.743 Sun May 21 11:23:35 2006
+++ ZendEngine2/zend_execute.c Sun May 21 12:38:28 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute.c,v 1.743 2006/05/21 11:23:35 helly Exp $ */
+/* $Id: zend_execute.c,v 1.744 2006/05/21 12:38:28 helly Exp $ */
#define ZEND_INTENSIVE_DEBUGGING 0
@@ -477,8 +477,9 @@
{
zend_arg_info *cur_arg_info;
zend_execute_data *ptr = EG(current_execute_data)->prev_execute_data;
- char *fsep;
+ char *fsep, *error_msg;
zstr fclass, fname;
+ zend_class_entry *ce;
if (!zf->common.arg_info
|| arg_num>zf->common.num_args) {
@@ -511,9 +512,8 @@
}
break;
case IS_OBJECT: {
- zend_class_entry *ce =
zend_u_fetch_class(UG(unicode) ? IS_UNICODE : IS_STRING,
cur_arg_info->class_name, cur_arg_info->class_name_len, ZEND_FETCH_CLASS_AUTO
TSRMLS_CC);
+ ce = zend_u_fetch_class(UG(unicode) ?
IS_UNICODE : IS_STRING, cur_arg_info->class_name, cur_arg_info->class_name_len,
ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
if
(!instanceof_function(Z_OBJCE_P(arg), ce TSRMLS_CC)) {
- char *error_msg;
if (ce->ce_flags &
ZEND_ACC_INTERFACE) {
error_msg = "implement
interface";
} else {
@@ -528,13 +528,20 @@
}
}
break;
- default:
+ default: {
+ ce = zend_u_fetch_class(UG(unicode) ?
IS_UNICODE : IS_STRING, cur_arg_info->class_name, cur_arg_info->class_name_len,
ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
+ if (ce->ce_flags & ZEND_ACC_INTERFACE) {
+ error_msg = "implement interface";
+ } else {
+ error_msg = "be an instance of";
+ }
if (ptr && ptr->op_array) {
- zend_error(E_RECOVERABLE_ERROR,
"Argument %d passed to %v%s%v() must be an object of class %v, %s given, called
in %s on line %d and defined", arg_num, fclass, fsep, fname,
cur_arg_info->class_name, zend_zval_type_name(arg), ptr->op_array->filename,
ptr->opline->lineno);
+ zend_error(E_RECOVERABLE_ERROR,
"Argument %d passed to %v%s%v() must %s %v, %s given, called in %s on line %d
and defined", arg_num, fclass, fsep, fname, error_msg, ce->name,
zend_zval_type_name(arg), ptr->op_array->filename, ptr->opline->lineno);
} else {
- zend_error(E_RECOVERABLE_ERROR,
"Argument %d passed to %v%s%v() must be an object of class %v, %s given",
arg_num, fclass, fsep, fname, cur_arg_info->class_name,
zend_zval_type_name(arg));
+ zend_error(E_RECOVERABLE_ERROR,
"Argument %d passed to %v%s%v() must %s %v, %s given", arg_num, fclass, fsep,
fname, error_msg, ce->name, zend_zval_type_name(arg));
}
return 0;
+ }
}
} else if (cur_arg_info->array_type_hint) {
if (!arg) {
http://cvs.php.net/viewcvs.cgi/php-src/tests/lang/bug24658.phpt?r1=1.6&r2=1.7&diff_format=u
Index: php-src/tests/lang/bug24658.phpt
diff -u php-src/tests/lang/bug24658.phpt:1.6
php-src/tests/lang/bug24658.phpt:1.7
--- php-src/tests/lang/bug24658.phpt:1.6 Sun May 21 11:23:35 2006
+++ php-src/tests/lang/bug24658.phpt Sun May 21 12:38:28 2006
@@ -53,4 +53,4 @@
object(foo)#%d (0) {
}
-Catchable fatal error: Argument 1 passed to typehint() must be an object of
class foo, integer given in %s on line %d
+Catchable fatal error: Argument 1 passed to typehint() must be an instance of
foo, integer given in %s on line %d
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php