patch 8.0.0075 Problem: Using number for exception type lacks type checking. Solution: Use an enum.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 9ad7d77..6b4e5fb 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c
@@ -1388,8 +1388,6 @@ break; case ET_INTERRUPT: break; - default: - p = vim_strsave((char_u *)_(e_internal)); } saved_sourcing_name = sourcing_name;
diff --git a/src/ex_eval.c b/src/ex_eval.c index 7589f8e..17e0fdb 100644 --- a/src/ex_eval.c +++ b/src/ex_eval.c
@@ -16,7 +16,7 @@ #if defined(FEAT_EVAL) || defined(PROTO) static void free_msglist(struct msglist *l); -static int throw_exception(void *, int, char_u *); +static int throw_exception(void *, except_type_T, char_u *); static char_u *get_end_emsg(struct condstack *cstack); /* @@ -422,7 +422,7 @@ char_u * get_exception_string( void *value, - int type, + except_type_T type, char_u *cmdname, int *should_free) { @@ -503,7 +503,7 @@ * error exception. */ static int -throw_exception(void *value, int type, char_u *cmdname) +throw_exception(void *value, except_type_T type, char_u *cmdname) { except_T *excp; int should_free;
diff --git a/src/proto/ex_eval.pro b/src/proto/ex_eval.pro index 908b785..9274bce 100644 --- a/src/proto/ex_eval.pro +++ b/src/proto/ex_eval.pro
@@ -7,7 +7,7 @@ void free_global_msglist(void); void do_errthrow(struct condstack *cstack, char_u *cmdname); int do_intthrow(struct condstack *cstack); -char_u *get_exception_string(void *value, int type, char_u *cmdname, int *should_free); +char_u *get_exception_string(void *value, except_type_T type, char_u *cmdname, int *should_free); void discard_current_exception(void); void report_make_pending(int pending, void *value); void report_resume_pending(int pending, void *value);
diff --git a/src/structs.h b/src/structs.h index 7a4d7fb..31accea 100644 --- a/src/structs.h +++ b/src/structs.h
@@ -815,13 +815,23 @@ }; /* + * The exception types. + */ +typedef enum +{ + ET_USER, /* exception caused by ":throw" command */ + ET_ERROR, /* error exception */ + ET_INTERRUPT /* interrupt exception triggered by Ctrl-C */ +} except_type_T; + +/* * Structure describing an exception. * (don't use "struct exception", it's used by the math library). */ typedef struct vim_exception except_T; struct vim_exception { - int type; /* exception type */ + except_type_T type; /* exception type */ char_u *value; /* exception value */ struct msglist *messages; /* message(s) causing error exception */ char_u *throw_name; /* name of the throw point */ @@ -830,13 +840,6 @@ }; /* - * The exception types. - */ -#define ET_USER 0 /* exception caused by ":throw" command */ -#define ET_ERROR 1 /* error exception */ -#define ET_INTERRUPT 2 /* interrupt exception triggered by Ctrl-C */ - -/* * Structure to save the error/interrupt/exception state between calls to * enter_cleanup() and leave_cleanup(). Must be allocated as an automatic * variable by the (common) caller of these functions.
diff --git a/src/version.c b/src/version.c index 80e30dc..ce19c0c 100644 --- a/src/version.c +++ b/src/version.c
@@ -765,6 +765,8 @@ static int included_patches[] = { /* Add new patch number below this line */ /**/ + 75, +/**/ 74, /**/ 73,