]> granicus.if.org Git - php/commitdiff
- MFH: Improve error message
authorMarcus Boerger <helly@php.net>
Wed, 14 Sep 2005 18:23:48 +0000 (18:23 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 14 Sep 2005 18:23:48 +0000 (18:23 +0000)
Zend/zend_execute.c

index a0655e20ad187c1d42e03b528f5c545545b4a0d0..d26b4416ee069d2d9a89dfb360d6ab0c091a2e10 100644 (file)
@@ -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;
                }