diff --git a/src/error.c b/src/error.c index 3050cef662345ba40794b7a2bb580a99add85ef0..9cc6314250e008218e80672548c794d9eaaeb122 100644 --- a/src/error.c +++ b/src/error.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: error.c,v 1.118 2003/11/14 00:07:35 mast Exp $ +|| $Id: error.c,v 1.119 2003/11/14 04:10:32 mast Exp $ */ #define NO_PIKE_SHORTHAND @@ -23,7 +23,7 @@ #include "threads.h" #include "gc.h" -RCSID("$Id: error.c,v 1.118 2003/11/14 00:07:35 mast Exp $"); +RCSID("$Id: error.c,v 1.119 2003/11/14 04:10:32 mast Exp $"); #undef ATTRIBUTE #define ATTRIBUTE(X) @@ -476,12 +476,12 @@ static void f_error_cast(INT32 args) if(!strncmp(s,"array",5)) { pop_n_elems(args); - if(GENERIC_ERROR_THIS->desc) - ref_push_string(GENERIC_ERROR_THIS->desc); + if(GENERIC_ERROR_THIS->error_message) + ref_push_string(GENERIC_ERROR_THIS->error_message); else push_int(0); - if(GENERIC_ERROR_THIS->backtrace) - ref_push_array(GENERIC_ERROR_THIS->backtrace); + if(GENERIC_ERROR_THIS->error_backtrace) + ref_push_array(GENERIC_ERROR_THIS->error_backtrace); else push_int(0); f_aggregate(2); @@ -518,15 +518,15 @@ static void f_error_index(INT32 args) { case 0: pop_n_elems(args); - if(GENERIC_ERROR_THIS->desc) - ref_push_string(GENERIC_ERROR_THIS->desc); + if(GENERIC_ERROR_THIS->error_message) + ref_push_string(GENERIC_ERROR_THIS->error_message); else push_int(0); break; case 1: pop_n_elems(args); - if(GENERIC_ERROR_THIS->backtrace) - ref_push_array(GENERIC_ERROR_THIS->backtrace); + if(GENERIC_ERROR_THIS->error_backtrace) + ref_push_array(GENERIC_ERROR_THIS->error_backtrace); else push_int(0); break; @@ -539,10 +539,7 @@ static void f_error_index(INT32 args) /*! @decl string describe() *! - *! Make a readable error-message. - *! - *! @note - *! Uses @[describe_backtrace()] to generate the message. + *! Return a readable error report that includes the backtrace. */ static void f_error_describe(INT32 args) { @@ -551,9 +548,22 @@ static void f_error_describe(INT32 args) APPLY_MASTER("describe_backtrace",1); } +/*! @decl string message() + *! + *! Return a readable message describing the error. + */ +static void f_error_message(INT32 args) +{ + pop_n_elems(args); + if (GENERIC_ERROR_THIS->error_message) + ref_push_string (GENERIC_ERROR_THIS->error_message); + else + push_int (0); +} + /*! @decl array backtrace() *! - *! Get the backtrace from where the error occurred. + *! Return the backtrace where the error occurred. *! *! @seealso *! @[predef::backtrace()] @@ -561,8 +571,8 @@ static void f_error_describe(INT32 args) static void f_error_backtrace(INT32 args) { pop_n_elems(args); - if(GENERIC_ERROR_THIS->backtrace) - ref_push_array(GENERIC_ERROR_THIS->backtrace); + if(GENERIC_ERROR_THIS->error_backtrace) + ref_push_array(GENERIC_ERROR_THIS->error_backtrace); else push_int(0); } @@ -585,8 +595,8 @@ static void f_error__sprintf(INT32 args) } push_svalue(&PROG_FROM_INT(p, i)->constants[id->func.offset].sval); push_constant_text("(%O)"); - if(GENERIC_ERROR_THIS->desc) - ref_push_string(GENERIC_ERROR_THIS->desc); + if(GENERIC_ERROR_THIS->error_message) + ref_push_string(GENERIC_ERROR_THIS->error_message); else push_int(0); f_sprintf(2); @@ -599,13 +609,13 @@ static void f_error_create(INT32 args) { struct pike_string *msg; get_all_args("create", args, "%W", &msg); - do_free_string(GENERIC_ERROR_THIS->desc); - copy_shared_string(GENERIC_ERROR_THIS->desc, msg); + do_free_string(GENERIC_ERROR_THIS->error_message); + copy_shared_string(GENERIC_ERROR_THIS->error_message, msg); f_backtrace(0); push_int (0); push_int (Pike_sp[-2].u.array->size-2); o_range (); - assign_to_short_svalue ((union anything *)&GENERIC_ERROR_THIS->backtrace, + assign_to_short_svalue ((union anything *)&GENERIC_ERROR_THIS->error_backtrace, PIKE_T_ARRAY, Pike_sp-1); pop_n_elems(args+1); } @@ -644,7 +654,7 @@ static void f_error_create(INT32 args) assign_svalue_no_free( & ERROR_STRUCT(STRUCT,o)->X, X); \ } else { \ ERROR_STRUCT(STRUCT, o)->X.type = PIKE_T_INT; \ - ERROR_STRUCT(STRUCT, o)->X.subtype = 0; \ + ERROR_STRUCT(STRUCT, o)->X.subtype = NUMBER_UNDEFINED; \ ERROR_STRUCT(STRUCT, o)->X.u.integer = 0; \ } \ } while (0) @@ -680,7 +690,7 @@ DECLSPEC(noreturn) void generic_error_va(struct object *o, } #endif - ERROR_STRUCT(generic,o)->desc=make_shared_string(buf); + ERROR_STRUCT(generic,o)->error_message=make_shared_string(buf); f_backtrace(0); if(func) @@ -699,7 +709,7 @@ DECLSPEC(noreturn) void generic_error_va(struct object *o, if(Pike_sp[-1].type!=PIKE_T_ARRAY) Pike_fatal("Error failed to generate a backtrace!\n"); - ERROR_STRUCT(generic,o)->backtrace=Pike_sp[-1].u.array; + ERROR_STRUCT(generic,o)->error_backtrace=Pike_sp[-1].u.array; Pike_sp--; dmalloc_touch_svalue(Pike_sp); @@ -740,38 +750,31 @@ PMOD_EXPORT DECLSPEC(noreturn) void generic_error( PMOD_EXPORT DECLSPEC(noreturn) void index_error( const char *func, struct svalue *base_sp, int args, - struct svalue *val, - struct svalue *ind, + struct svalue *value, + struct svalue *index, const char *desc, ...) ATTRIBUTE((noreturn,format (printf, 6, 7))) { INIT_ERROR(index); - ERROR_COPY_SVALUE(index, val); - ERROR_COPY_SVALUE(index, ind); + ERROR_COPY_SVALUE(index, value); + ERROR_COPY_SVALUE(index, index); ERROR_DONE(generic); } PMOD_EXPORT DECLSPEC(noreturn) void bad_arg_error( const char *func, struct svalue *base_sp, int args, - int which_arg, + int which_argument, const char *expected_type, - struct svalue *got, + struct svalue *got_value, const char *desc, ...) ATTRIBUTE((noreturn,format (printf, 7, 8))) { INIT_ERROR(bad_arg); - ERROR_COPY(bad_arg, which_arg); + ERROR_COPY(bad_arg, which_argument); if (expected_type) ERROR_STRUCT(bad_arg,o)->expected_type=make_shared_string(expected_type); else ERROR_STRUCT(bad_arg,o)->expected_type = NULL; - if(got) - { - ERROR_COPY_SVALUE(bad_arg, got); - }else{ - ERROR_STRUCT(bad_arg,o)->got.type=PIKE_T_INT; - ERROR_STRUCT(bad_arg,o)->got.subtype=NUMBER_UNDEFINED; - ERROR_STRUCT(bad_arg,o)->got.u.integer=0; - } + ERROR_COPY_SVALUE(bad_arg, got_value); DWERROR((stderr, "%s():Bad arg %d (expected %s)\n", func, which_arg, expected_type)); ERROR_DONE(generic); diff --git a/src/errors.h b/src/errors.h index 7524e7f0b770b3652ed0378a0a46ef0c99681d2e..4e42d68157423d78d38968cd5115796f5a8371e5 100644 --- a/src/errors.h +++ b/src/errors.h @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: errors.h,v 1.23 2003/07/21 23:41:34 mast Exp $ +|| $Id: errors.h,v 1.24 2003/11/14 04:10:32 mast Exp $ */ #ifdef ERR_DECLARE @@ -44,7 +44,7 @@ struct PIKE_CONCAT(NAME,_error_struct) { \ }while(0); #define ERR_VAR(TYPE,CTYPE,RUNTYPE,NAME2) \ - map_variable("__" #NAME2, #CTYPE, 0, \ + map_variable(#NAME2, #CTYPE, 0, \ current_offset + (((char *)&(foo.NAME2))-((char *)&foo)), RUNTYPE); #define EMPTY @@ -79,11 +79,12 @@ struct PIKE_CONCAT(NAME,_error_struct) { \ #endif DECLARE_ERROR(generic, EMPTY , - ERR_VAR(struct pike_string *,string,PIKE_T_STRING,desc) - ERR_VAR(struct array *,array,PIKE_T_ARRAY,backtrace) + ERR_VAR(struct pike_string *,string,PIKE_T_STRING,error_message) + ERR_VAR(struct array *,array,PIKE_T_ARRAY,error_backtrace) ERR_FUNC("cast",f_error_cast,tFunc(tString,tMixed),0) ERR_FUNC("`[]",f_error_index,tFunc(tString,tMixed),0) ERR_FUNC("describe",f_error_describe,tFunc(tVoid,tString),0) + ERR_FUNC("message", f_error_message, tFunc(tVoid,tString), 0) ERR_FUNC("backtrace",f_error_backtrace,tFunc(tVoid,tArr(tMixed)),0) ERR_FUNC("_sprintf",f_error__sprintf,tFunc(tNone,tString),0) ERR_FUNC("create",f_error_create,tFunc(tStr,tVoid),ID_STATIC) @@ -93,15 +94,15 @@ DECLARE_ERROR(generic, EMPTY , DECLARE_ERROR(index, ERR_INHERIT(generic), - ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, val) - ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, ind) + ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, value) + ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, index) ) DECLARE_ERROR(bad_arg, ERR_INHERIT(generic), - ERR_VAR(INT_TYPE, int, PIKE_T_INT, which_arg) + ERR_VAR(INT_TYPE, int, PIKE_T_INT, which_argument) ERR_VAR(struct pike_string *,string,PIKE_T_STRING,expected_type) - ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, got) + ERR_VAR(struct svalue, mixed, PIKE_T_MIXED, got_value) ) DECLARE_ERROR(math,