diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-09-10 21:05:02 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-09-10 21:05:02 +0200 |
commit | f29c1c6aa3f365c025890fab5fb9efbe88eb1761 (patch) | |
tree | 3cd43ee75a7e0fbdce4902426512ae804b1c7ff0 /src/ex_cmds2.c | |
parent | 6b0b83f768cf536b34ce4d3f2de6bf62324229aa (diff) | |
download | vim-git-f29c1c6aa3f365c025890fab5fb9efbe88eb1761.tar.gz |
patch 8.1.0362: cannot get the script line number when executing a functionv8.1.0362
Problem: Cannot get the script line number when executing a function.
Solution: Store the line number besides the script ID. (Ozaki Kiichi,
closes #3362) Also display the line number with ":verbose set".
Diffstat (limited to 'src/ex_cmds2.c')
-rw-r--r-- | src/ex_cmds2.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index 08eb18178..28245d178 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -1866,9 +1866,9 @@ script_prof_save( { scriptitem_T *si; - if (current_SID > 0 && current_SID <= script_items.ga_len) + if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len) { - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on && si->sn_pr_nest++ == 0) profile_start(&si->sn_pr_child); } @@ -1883,9 +1883,9 @@ script_prof_restore(proftime_T *tm) { scriptitem_T *si; - if (current_SID > 0 && current_SID <= script_items.ga_len) + if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len) { - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on && --si->sn_pr_nest == 0) { profile_end(&si->sn_pr_child); @@ -2003,8 +2003,8 @@ script_dump_profile(FILE *fd) int prof_def_func(void) { - if (current_SID > 0) - return SCRIPT_ITEM(current_SID).sn_pr_force; + if (current_sctx.sc_sid > 0) + return SCRIPT_ITEM(current_sctx.sc_sid).sn_pr_force; return FALSE; } @@ -4351,7 +4351,7 @@ do_source( char_u *firstline = NULL; int retval = FAIL; #ifdef FEAT_EVAL - scid_T save_current_SID; + sctx_T save_current_sctx; static scid_T last_current_SID = 0; void *save_funccalp; int save_debug_break_level = debug_break_level; @@ -4521,13 +4521,15 @@ do_source( * Check if this script was sourced before to finds its SID. * If it's new, generate a new SID. */ - save_current_SID = current_SID; + save_current_sctx = current_sctx; + current_sctx.sc_lnum = 0; # ifdef UNIX stat_ok = (mch_stat((char *)fname_exp, &st) >= 0); # endif - for (current_SID = script_items.ga_len; current_SID > 0; --current_SID) + for (current_sctx.sc_sid = script_items.ga_len; current_sctx.sc_sid > 0; + --current_sctx.sc_sid) { - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_name != NULL && ( # ifdef UNIX @@ -4541,13 +4543,13 @@ do_source( fnamecmp(si->sn_name, fname_exp) == 0)) break; } - if (current_SID == 0) + if (current_sctx.sc_sid == 0) { - current_SID = ++last_current_SID; - if (ga_grow(&script_items, (int)(current_SID - script_items.ga_len)) - == FAIL) + current_sctx.sc_sid = ++last_current_SID; + if (ga_grow(&script_items, + (int)(current_sctx.sc_sid - script_items.ga_len)) == FAIL) goto almosttheend; - while (script_items.ga_len < current_SID) + while (script_items.ga_len < current_sctx.sc_sid) { ++script_items.ga_len; SCRIPT_ITEM(script_items.ga_len).sn_name = NULL; @@ -4555,7 +4557,7 @@ do_source( SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE; # endif } - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); si->sn_name = fname_exp; fname_exp = NULL; # ifdef UNIX @@ -4570,7 +4572,7 @@ do_source( # endif /* Allocate the local script variables to use for this script. */ - new_script_vars(current_SID); + new_script_vars(current_sctx.sc_sid); } # ifdef FEAT_PROFILE @@ -4626,7 +4628,7 @@ do_source( if (do_profiling == PROF_YES) { /* Get "si" again, "script_items" may have been reallocated. */ - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on) { profile_end(&si->sn_pr_start); @@ -4671,7 +4673,7 @@ do_source( #ifdef FEAT_EVAL almosttheend: - current_SID = save_current_SID; + current_sctx = save_current_sctx; restore_funccal(save_funccalp); # ifdef FEAT_PROFILE if (do_profiling == PROF_YES) @@ -5090,9 +5092,9 @@ script_line_start(void) scriptitem_T *si; sn_prl_T *pp; - if (current_SID <= 0 || current_SID > script_items.ga_len) + if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len) return; - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on && sourcing_lnum >= 1) { /* Grow the array before starting the timer, so that the time spent @@ -5125,9 +5127,9 @@ script_line_exec(void) { scriptitem_T *si; - if (current_SID <= 0 || current_SID > script_items.ga_len) + if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len) return; - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on && si->sn_prl_idx >= 0) si->sn_prl_execed = TRUE; } @@ -5141,9 +5143,9 @@ script_line_end(void) scriptitem_T *si; sn_prl_T *pp; - if (current_SID <= 0 || current_SID > script_items.ga_len) + if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len) return; - si = &SCRIPT_ITEM(current_SID); + si = &SCRIPT_ITEM(current_sctx.sc_sid); if (si->sn_prof_on && si->sn_prl_idx >= 0 && si->sn_prl_idx < si->sn_prl_ga.ga_len) { |