diff options
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index a0655e20ad..d26b4416ee 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -448,6 +448,7 @@ static inline void zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zv { zend_arg_info *cur_arg_info; zend_execute_data *ptr = EG(current_execute_data)->prev_execute_data; + char *fclass, *fsep, *fname; if (!zf->common.arg_info || arg_num>zf->common.num_args) { @@ -455,22 +456,25 @@ static inline void zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zv } 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 : ""; if (cur_arg_info->class_name) { if (!arg) { if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must be an object of class %s, called in %s on line %d and defined", arg_num, cur_arg_info->class_name, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an object of class %s, 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_noreturn(E_ERROR, "Argument %d must be an object of class %s", arg_num, cur_arg_info->class_name); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an object of class %s", arg_num, fclass, fsep, fname, cur_arg_info->class_name); } } switch (Z_TYPE_P(arg)) { case IS_NULL: if (!cur_arg_info->allow_null) { if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must not be null, called in %s on line %d and defined", arg_num, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must not be null, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); } else { - zend_error_noreturn(E_ERROR, "Argument %d must not be null", arg_num); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must not be null", arg_num, fclass, fsep, fname); } } break; @@ -485,36 +489,36 @@ static inline void zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zv error_msg = "be an instance of"; } if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must %s %s, called in %s on line %d and defined", arg_num, error_msg, ce->name, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must %s %s, called in %s on line %d and defined", arg_num, fclass, fsep, fname, error_msg, ce->name, ptr->op_array->filename, ptr->opline->lineno); } else { - zend_error_noreturn(E_ERROR, "Argument %d must %s %s", arg_num, error_msg, ce->name); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must %s %s", arg_num, fclass, fsep, fname, error_msg, ce->name); } } } break; default: if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must be an object of class %s, called in %s on line %d and defined", arg_num, cur_arg_info->class_name, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an object of class %s, 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_noreturn(E_ERROR, "Argument %d must be an object of class %s", arg_num, cur_arg_info->class_name); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an object of class %s", arg_num, fclass, fsep, fname, cur_arg_info->class_name); } break; } } else if (cur_arg_info->array_type_hint) { if (!arg) { if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must be an array, called in %s on line %d and defined", arg_num, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an array, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); } else { - zend_error_noreturn(E_ERROR, "Argument %d must be an array", arg_num); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an array", arg_num, fclass, fsep, fname); } } switch (Z_TYPE_P(arg)) { case IS_NULL: if (!cur_arg_info->allow_null) { if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must not be null, called in %s on line %d and defined", arg_num, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must not be null, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); } else { - zend_error_noreturn(E_ERROR, "Argument %d must not be null", arg_num); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must not be null", arg_num, fclass, fsep, fname); } } break; @@ -522,9 +526,9 @@ static inline void zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zv break; default: if(ptr && ptr->op_array) { - zend_error_noreturn(E_ERROR, "Argument %d must be an array, called in %s on line %d and defined", arg_num, ptr->op_array->filename, ptr->opline->lineno); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an array, called in %s on line %d and defined", arg_num, fclass, fsep, fname, ptr->op_array->filename, ptr->opline->lineno); } else { - zend_error_noreturn(E_ERROR, "Argument %d must be an array", arg_num); + zend_error_noreturn(E_ERROR, "Argument %d to %s%s%s() must be an array", arg_num, fclass, fsep, fname); } break; } |