helly Fri May 26 00:26:45 2006 UTC Modified files: /ZendEngine2 zend_execute.c /ZendEngine2/tests bug33996.phpt /php-src/tests/classes interfaces_003.phpt Log: - Sync error messages and simplify error message generation code
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_execute.c?r1=1.744&r2=1.745&diff_format=u Index: ZendEngine2/zend_execute.c diff -u ZendEngine2/zend_execute.c:1.744 ZendEngine2/zend_execute.c:1.745 --- ZendEngine2/zend_execute.c:1.744 Sun May 21 12:38:28 2006 +++ ZendEngine2/zend_execute.c Fri May 26 00:26:44 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.744 2006/05/21 12:38:28 helly Exp $ */ +/* $Id: zend_execute.c,v 1.745 2006/05/26 00:26:44 helly Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -473,12 +473,44 @@ } } +static inline char * zend_verify_arg_class_kind(zend_arg_info *cur_arg_info, zend_class_entry **pce TSRMLS_DC) +{ + *pce = 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 ((*pce)->ce_flags & ZEND_ACC_INTERFACE) { + return "implement interface "; + } else { + return "be an instance of "; + } +} + +static inline int zend_verify_arg_error(zend_function *zf, zend_uint arg_num, zend_arg_info *cur_arg_info, char *need_msg, zstr need_kind, char *given_msg, zstr given_kind TSRMLS_DC) +{ + zend_execute_data *ptr = EG(current_execute_data)->prev_execute_data; + zstr fname = zf->common.function_name; + char *fsep; + zstr fclass; + + if (zf->common.scope) { + fsep = "::"; + fclass = zf->common.scope->name; + } else { + fsep = ""; + fclass = EMPTY_ZSTR; + } + + if (ptr && ptr->op_array) { + zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must %s%v, %s%v given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, need_msg, need_kind, given_msg, given_kind, ptr->op_array->filename, ptr->opline->lineno); + } else { + zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must %s%v, %s%v given", arg_num, fclass, fsep, fname, need_msg, need_kind, given_msg, given_kind); + } + return 0; +} + static inline int zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zval *arg TSRMLS_DC) { zend_arg_info *cur_arg_info; - zend_execute_data *ptr = EG(current_execute_data)->prev_execute_data; - char *fsep, *error_msg; - zstr fclass, fname; + char *need_msg; zend_class_entry *ce; if (!zf->common.arg_info @@ -487,91 +519,27 @@ } cur_arg_info = &zf->common.arg_info[arg_num-1]; - fname = zf->common.function_name; - fsep = zf->common.scope ? "::" : ""; - fclass = zf->common.scope ? zf->common.scope->name : EMPTY_ZSTR; if (cur_arg_info->class_name.v) { if (!arg) { - if (ptr && ptr->op_array) { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an object of class %v, none given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, cur_arg_info->class_name, 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, none given", arg_num, fclass, fsep, fname, cur_arg_info->class_name); - } - return 0; + need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC); + return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, "none", EMPTY_ZSTR TSRMLS_CC); } - switch (Z_TYPE_P(arg)) { - case IS_NULL: - if (!cur_arg_info->allow_null) { - if (ptr && ptr->op_array) { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an object of class %v, null given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, cur_arg_info->class_name, 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, null given", arg_num, fclass, fsep, fname, cur_arg_info->class_name); - } - return 0; - } - break; - case IS_OBJECT: { - 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)) { - 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 %s %v, instance of %v given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, error_msg, ce->name, Z_OBJCE_P(arg)->name, ptr->op_array->filename, ptr->opline->lineno); - } else { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must %s %v, instance of %v given", arg_num, fclass, fsep, fname, error_msg, ce->name, Z_OBJCE_P(arg)->name); - } - return 0; - } - } - break; - 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 %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 %s %v, %s given", arg_num, fclass, fsep, fname, error_msg, ce->name, zend_zval_type_name(arg)); - } - return 0; - } + if (Z_TYPE_P(arg) == IS_OBJECT) { + need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC); + if (!instanceof_function(Z_OBJCE_P(arg), ce TSRMLS_CC)) { + return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, "instance of ", Z_OBJCE_P(arg)->name TSRMLS_CC); + } + } else if (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null) { + need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC); + return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, zend_zval_type_name(arg), EMPTY_ZSTR TSRMLS_CC); } } else if (cur_arg_info->array_type_hint) { if (!arg) { - if (ptr && ptr->op_array) { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an array, none given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); - } else { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an array, none given", arg_num, fclass, fsep, fname); - } - return 0; + return zend_verify_arg_error(zf, arg_num, cur_arg_info, "be an array", EMPTY_ZSTR, "none", EMPTY_ZSTR TSRMLS_CC); } - switch (Z_TYPE_P(arg)) { - case IS_NULL: - if (!cur_arg_info->allow_null) { - if (ptr && ptr->op_array) { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an array, null given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); - } else { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an array, null given", arg_num, fclass, fsep, fname); - } - return 0; - } - break; - case IS_ARRAY: - break; - default: - if (ptr && ptr->op_array) { - zend_error(E_RECOVERABLE_ERROR, "Argument %d passed to %v%s%v() must be an array, %s given, called in %s on line %d and defined", arg_num, fclass, fsep, fname, 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 array, %s given", arg_num, fclass, fsep, fname, zend_zval_type_name(arg)); - } - return 0; + if (Z_TYPE_P(arg) != IS_ARRAY && (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null)) { + return zend_verify_arg_error(zf, arg_num, cur_arg_info, "be an array", EMPTY_ZSTR, zend_zval_type_name(arg), EMPTY_ZSTR TSRMLS_CC); } } return 1; http://cvs.php.net/viewcvs.cgi/ZendEngine2/tests/bug33996.phpt?r1=1.4&r2=1.5&diff_format=u Index: ZendEngine2/tests/bug33996.phpt diff -u ZendEngine2/tests/bug33996.phpt:1.4 ZendEngine2/tests/bug33996.phpt:1.5 --- ZendEngine2/tests/bug33996.phpt:1.4 Sun May 21 11:23:35 2006 +++ ZendEngine2/tests/bug33996.phpt Fri May 26 00:26:45 2006 @@ -26,4 +26,4 @@ --EXPECTF-- Warning: Missing argument 1 for NormalTest(), called in %sbug33996.php on line %d and defined in %sbug33996.php on line %d Hi! -Catchable fatal error: Argument 1 passed to FooTest() must be an object of class Foo, none given, called in %sbug33996.php on line %d and defined in %sbug33996.php on line %d +Catchable fatal error: Argument 1 passed to FooTest() must be an instance of Foo, none given, called in %sbug33996.php on line %d and defined in %sbug33996.php on line %d http://cvs.php.net/viewcvs.cgi/php-src/tests/classes/interfaces_003.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/tests/classes/interfaces_003.phpt diff -u php-src/tests/classes/interfaces_003.phpt:1.3 php-src/tests/classes/interfaces_003.phpt:1.4 --- php-src/tests/classes/interfaces_003.phpt:1.3 Sun May 21 11:23:35 2006 +++ php-src/tests/classes/interfaces_003.phpt Fri May 26 00:26:45 2006 @@ -23,4 +23,4 @@ ===DONE=== --EXPECTF-- -Catchable fatal error: Argument 1 passed to MyTestClass::__construct() must be an object of class MyObject, none given, called in %sinterfaces_003.php on line %d +Catchable fatal error: Argument 1 passed to MyTestClass::__construct() must be an instance of MyObject, none given, called in %sinterfaces_003.php on line %d
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php