Mercurial > vim
diff src/ex_docmd.c @ 170:8c60f65311fa v7.0052
updated for version 7.0052
author | vimboss |
---|---|
date | Sat, 26 Feb 2005 23:04:13 +0000 |
parents | c93c9cad9618 |
children | 54f0f39bdf01 |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -434,6 +434,10 @@ static void ex_folddo __ARGS((exarg_T *e # define ex_changes ex_ni #endif +#ifndef FEAT_PROFILE +# define ex_profile ex_ni +#endif + /* * Declare cmdnames[]. */ @@ -728,6 +732,7 @@ do_cmdline(cmdline, getline, cookie, fla void *cmd_cookie; struct loop_cookie cmd_loop_cookie; void *real_cookie; + int getline_is_func; #else # define cmd_getline getline # define cmd_cookie cookie @@ -772,13 +777,13 @@ do_cmdline(cmdline, getline, cookie, fla real_cookie = getline_cookie(getline, cookie); /* Inside a function use a higher nesting level. */ - if (getline_equal(getline, cookie, get_func_line) - && ex_nesting_level == func_level(real_cookie)) + getline_is_func = getline_equal(getline, cookie, get_func_line); + if (getline_is_func && ex_nesting_level == func_level(real_cookie)) ++ex_nesting_level; /* Get the function or script name and the address where the next breakpoint * line and the debug tick for a function or script are stored. */ - if (getline_equal(getline, cookie, get_func_line)) + if (getline_is_func) { fname = func_name(real_cookie); breakpoint = func_breakpoint(real_cookie); @@ -837,13 +842,16 @@ do_cmdline(cmdline, getline, cookie, fla next_cmdline = cmdline; do { +#ifdef FEAT_EVAL + getline_is_func = getline_equal(getline, cookie, get_func_line); +#endif + /* stop skipping cmds for an error msg after all endif/while/for */ if (next_cmdline == NULL #ifdef FEAT_EVAL && !force_abort && cstack.cs_idx < 0 - && !(getline_equal(getline, cookie, get_func_line) - && func_has_abort(real_cookie)) + && !(getline_is_func && func_has_abort(real_cookie)) #endif ) did_emsg = FALSE; @@ -865,12 +873,23 @@ do_cmdline(cmdline, getline, cookie, fla /* Check if a function has returned or, unless it has an unclosed * try conditional, aborted. */ - if (getline_equal(getline, cookie, get_func_line) - && func_has_ended(real_cookie)) - { - retval = FAIL; - break; - } + if (getline_is_func) + { +# ifdef FEAT_PROFILE + if (do_profiling) + func_line_end(real_cookie); +# endif + if (func_has_ended(real_cookie)) + { + retval = FAIL; + break; + } + } +#ifdef FEAT_PROFILE + else if (do_profiling + && getline_equal(getline, cookie, getsourceline)) + script_line_end(); +#endif /* Check if a sourced file hit a ":finish" command. */ if (source_finished(getline, cookie)) @@ -903,6 +922,15 @@ do_cmdline(cmdline, getline, cookie, fla fname, sourcing_lnum); *dbg_tick = debug_tick; } +# ifdef FEAT_PROFILE + if (do_profiling) + { + if (getline_is_func) + func_line_start(real_cookie); + else if (getline_equal(getline, cookie, getsourceline)) + script_line_start(); + } +# endif } if (cstack.cs_looplevel > 0) @@ -1839,6 +1867,17 @@ do_one_cmd(cmdlinep, sourcing, #endif #ifdef FEAT_EVAL +# ifdef FEAT_PROFILE + /* Count this line for profiling if ea.skip is FALSE. */ + if (do_profiling && !ea.skip) + { + if (getline_equal(getline, cookie, get_func_line)) + func_line_exec(getline_cookie(getline, cookie)); + else if (getline_equal(getline, cookie, getsourceline)) + script_line_exec(); + } +#endif + /* May go to debug mode. If this happens and the ">quit" debug command is * used, throw an interrupt exception and skip the next command. */ dbg_check_breakpoint(&ea); @@ -4006,11 +4045,9 @@ skip_grep_pat(eap) if (*p != NUL && (eap->cmdidx == CMD_vimgrep || eap->cmdidx == CMD_vimgrepadd || grep_internal(eap->cmdidx))) { - p = skip_vimgrep_pat(p, NULL); + p = skip_vimgrep_pat(p, NULL, NULL); if (p == NULL) p = eap->arg; - else if (*p != NUL && !vim_iswhite(*p)) - ++p; /* step past ending separator of /pat/ */ } return p; }