# HG changeset patch # User Christian Brabandt # Date 1478806204 -3600 # Node ID 147f45c283e19eedcfc2fe318a1ae095633cae8e # Parent 2f43c275523502de955e2c5f57d25b8eb0741e71 commit https://github.com/vim/vim/commit/8a5883b7488e492419dde7e1637cc72f2d566ba4 Author: Bram Moolenaar Date: Thu Nov 10 20:20:05 2016 +0100 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 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1388,8 +1388,6 @@ do_cmdline( 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 --- 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 @@ do_intthrow(struct condstack *cstack) char_u * get_exception_string( void *value, - int type, + except_type_T type, char_u *cmdname, int *should_free) { @@ -503,7 +503,7 @@ get_exception_string( * 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 --- a/src/proto/ex_eval.pro +++ b/src/proto/ex_eval.pro @@ -7,7 +7,7 @@ int cause_errthrow(char_u *mesg, int sev 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 --- a/src/structs.h +++ b/src/structs.h @@ -815,13 +815,23 @@ struct msglist }; /* + * 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 @@ struct vim_exception }; /* - * 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 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 75, +/**/ 74, /**/ 73,