diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-06-16 11:19:22 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-06-16 11:19:22 +0000 |
commit | ed20346f0b81d1d89c22c9616abe8e47b4c17f08 (patch) | |
tree | 249992fe05850523ab4ed4bc8f66effc8a3251b9 /src/ex_docmd.c | |
parent | 071d4279d6ab81b7187b48f3a0fc61e587b6db6c (diff) | |
download | vim-git-ed20346f0b81d1d89c22c9616abe8e47b4c17f08.tar.gz |
Various changes
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r-- | src/ex_docmd.c | 109 |
1 files changed, 63 insertions, 46 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index f1331e918..c4b9012ca 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -487,6 +487,62 @@ struct while_cookie static char_u *get_while_line __ARGS((int c, void *cookie, int indent)); static int store_while_line __ARGS((garray_T *gap, char_u *line)); static void free_cmdlines __ARGS((garray_T *gap)); + +/* Struct to save a few things while debugging. Used in do_cmdline() only. */ +struct dbg_stuff +{ + int trylevel; + int force_abort; + except_T *caught_stack; + char_u *vv_exception; + char_u *vv_throwpoint; + int did_emsg; + int got_int; + int did_throw; + int need_rethrow; + int check_cstack; + except_T *current_exception; +}; + +static void save_dbg_stuff __ARGS((struct dbg_stuff *dsp)); +static void restore_dbg_stuff __ARGS((struct dbg_stuff *dsp)); + + static void +save_dbg_stuff(dsp) + struct dbg_stuff *dsp; +{ + dsp->trylevel = trylevel; trylevel = 0; + dsp->force_abort = force_abort; force_abort = FALSE; + dsp->caught_stack = caught_stack; caught_stack = NULL; + dsp->vv_exception = v_exception(NULL); + dsp->vv_throwpoint = v_throwpoint(NULL); + + /* Necessary for debugging an inactive ":catch", ":finally", ":endtry" */ + dsp->did_emsg = did_emsg; did_emsg = FALSE; + dsp->got_int = got_int; got_int = FALSE; + dsp->did_throw = did_throw; did_throw = FALSE; + dsp->need_rethrow = need_rethrow; need_rethrow = FALSE; + dsp->check_cstack = check_cstack; check_cstack = FALSE; + dsp->current_exception = current_exception; current_exception = NULL; +} + + static void +restore_dbg_stuff(dsp) + struct dbg_stuff *dsp; +{ + suppress_errthrow = FALSE; + trylevel = dsp->trylevel; + force_abort = dsp->force_abort; + caught_stack = dsp->caught_stack; + (void)v_exception(dsp->vv_exception); + (void)v_throwpoint(dsp->vv_throwpoint); + did_emsg = dsp->did_emsg; + got_int = dsp->got_int; + did_throw = dsp->did_throw; + need_rethrow = dsp->need_rethrow; + check_cstack = dsp->check_cstack; + current_exception = dsp->current_exception; +} #endif @@ -625,17 +681,7 @@ do_cmdline(cmdline, getline, cookie, flags) char_u *fname = NULL; /* function or script name */ linenr_T *breakpoint = NULL; /* ptr to breakpoint field in cookie */ int *dbg_tick = NULL; /* ptr to dbg_tick field in cookie */ - int saved_trylevel = 0; - int saved_force_abort = 0; - except_T *saved_caught_stack = NULL; - char_u *saved_vv_exception = NULL; - char_u *saved_vv_throwpoint = NULL; - int saved_did_emsg = 0; - int saved_got_int = 0; - int saved_did_throw = 0; - int saved_need_rethrow = 0; - int saved_check_cstack = 0; - except_T *saved_current_exception = NULL; + struct dbg_stuff debug_saved; /* saved things for debug mode */ int initial_trylevel; struct msglist **saved_msg_list = NULL; struct msglist *private_msg_list; @@ -725,21 +771,7 @@ do_cmdline(cmdline, getline, cookie, flags) * exception handling (used when debugging). */ else if (flags & DOCMD_EXCRESET) - { - saved_trylevel = trylevel; trylevel = 0; - saved_force_abort = force_abort; force_abort = FALSE; - saved_caught_stack = caught_stack; caught_stack = NULL; - saved_vv_exception = v_exception(NULL); - saved_vv_throwpoint = v_throwpoint(NULL); - /* Necessary for debugging an inactive ":catch", ":finally", or - * ":endtry": */ - saved_did_emsg = did_emsg, did_emsg = FALSE; - saved_got_int = got_int, got_int = FALSE; - saved_did_throw = did_throw, did_throw = FALSE; - saved_need_rethrow = need_rethrow, need_rethrow = FALSE; - saved_check_cstack = check_cstack, check_cstack = FALSE; - saved_current_exception = current_exception; current_exception=NULL; - } + save_dbg_stuff(&debug_saved); initial_trylevel = trylevel; @@ -1326,22 +1358,7 @@ do_cmdline(cmdline, getline, cookie, flags) * debugger). */ if (flags & DOCMD_EXCRESET) - { - suppress_errthrow = FALSE; - trylevel = saved_trylevel; - force_abort = saved_force_abort; - caught_stack = saved_caught_stack; - (void)v_exception(saved_vv_exception); - (void)v_throwpoint(saved_vv_throwpoint); - /* Necessary for debugging an inactive ":catch", ":finally", or - * ":endtry": */ - did_emsg = saved_did_emsg; - got_int = saved_got_int; - did_throw = saved_did_throw; - need_rethrow = saved_need_rethrow; - check_cstack = saved_check_cstack; - current_exception = saved_current_exception; - } + restore_dbg_stuff(&debug_saved); msg_list = saved_msg_list; #endif /* FEAT_EVAL */ @@ -1545,8 +1562,7 @@ getline_cookie(getline, cookie) */ #if (_MSC_VER == 1200) /* - * Optimisation bug in VC++ version 6.0 - * TODO: check this is still present after each service pack + * Avoid optimisation bug in VC++ version 6.0 */ # pragma optimize( "g", off ) #endif @@ -1738,8 +1754,9 @@ do_one_cmd(cmdlinep, sourcing, break; if (verbose_save < 0) verbose_save = p_verbose; - p_verbose = atoi((char *)ea.cmd); - if (p_verbose == 0) + if (vim_isdigit(*ea.cmd)) + p_verbose = atoi((char *)ea.cmd); + else p_verbose = 1; ea.cmd = p; continue; |