diff --git a/src/error.c b/src/error.c index 1770453aa3ba3a1c7463c4d4da3f04c1c3254bdb..aeda41fefe442ec3254cbb1bd1381d0c788a5f47 100644 --- a/src/error.c +++ b/src/error.c @@ -12,11 +12,14 @@ #include "array.h" #include "object.h" +#undef ATTRIBUTE +#define ATTRIBUTE(X) + char *automatic_fatal, *exit_on_error; JMP_BUF *recoveries=0; ONERROR *onerror_stack=0; -my_jmp_buf *init_recovery(JMP_BUF *r) +JMP_BUF *init_recovery(JMP_BUF *r) { r->fp=fp; r->sp=sp-evaluator_stack; @@ -24,10 +27,10 @@ my_jmp_buf *init_recovery(JMP_BUF *r) r->previous=recoveries; r->onerror=onerror_stack; recoveries=r; - return & ( r->recovery ); + return r; } -void throw() +void throw() ATTRIBUTE((noreturn)) { if(!recoveries) fatal("No error recovery context.\n"); @@ -67,7 +70,7 @@ void throw() struct svalue throw_value = { T_INT }; -void va_error(char *fmt, va_list args) +void va_error(char *fmt, va_list args) ATTRIBUTE((noreturn)) { char buf[2000]; static char *in_error; @@ -115,7 +118,7 @@ void va_error(char *fmt, va_list args) throw(); /* Hope someone is catching, or we will be out of balls. */ } -void error(char *fmt,...) +void error(char *fmt,...) ATTRIBUTE((noreturn,format (printf, 1, 2))) { va_list args; va_start(args,fmt); @@ -124,7 +127,7 @@ void error(char *fmt,...) } -void fatal(char *fmt, ...) +void fatal(char *fmt, ...) ATTRIBUTE((noreturn,format (printf, 1, 2))) { va_list args; static int in_fatal = 0; diff --git a/src/error.h b/src/error.h index f3878b3c767841fa15fcd4fe87646f0e71b853ca..527b7b8fbc335c251520b1aa1cfbcecfa136ae30 100644 --- a/src/error.h +++ b/src/error.h @@ -29,12 +29,10 @@ typedef struct ONERROR void *arg; } ONERROR; -typedef jmp_buf my_jmp_buf; /* Maybe I'll get less warnings like this */ - typedef struct JMP_BUF { struct JMP_BUF *previous; - my_jmp_buf recovery; + jmp_buf recovery; struct frame *fp; INT32 sp; INT32 mark_sp; @@ -46,7 +44,7 @@ extern JMP_BUF *recoveries; extern struct svalue throw_value; extern char *automatic_fatal, *exit_on_error; -#define SETJMP(X) setjmp((init_recovery(&X)[0])) +#define SETJMP(X) setjmp((init_recovery(&X)->recovery)) #define UNSETJMP(X) recoveries=X.previous; #define SET_ONERROR(X,Y,Z) \ @@ -59,12 +57,13 @@ extern char *automatic_fatal, *exit_on_error; #define UNSET_ONERROR(X) onerror_stack=X.previous -my_jmp_buf *init_recovery(JMP_BUF *r); -int fix_recovery(int i, JMP_BUF *r); +/* Prototypes begin here */ +JMP_BUF *init_recovery(JMP_BUF *r); void throw() ATTRIBUTE((noreturn)); void va_error(char *fmt, va_list args) ATTRIBUTE((noreturn)); void error(char *fmt,...) ATTRIBUTE((noreturn,format (printf, 1, 2))); void fatal(char *fmt, ...) ATTRIBUTE((noreturn,format (printf, 1, 2))); +/* Prototypes end here */ #endif