summaryrefslogtreecommitdiffstats
path: root/src/ex_cmds2.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-09-10 21:05:02 +0200
committerBram Moolenaar <Bram@vim.org>2018-09-10 21:05:02 +0200
commitf29c1c6aa3f365c025890fab5fb9efbe88eb1761 (patch)
tree3cd43ee75a7e0fbdce4902426512ae804b1c7ff0 /src/ex_cmds2.c
parent6b0b83f768cf536b34ce4d3f2de6bf62324229aa (diff)
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.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 08eb181787..28245d1781 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)
{