aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_cmds2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_cmds2.c')
-rw-r--r--src/nvim/ex_cmds2.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 691ad74100..96f758805b 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -1080,8 +1080,8 @@ void script_prof_save(
{
scriptitem_T *si;
- if (current_SID > 0 && current_SID <= script_items.ga_len) {
- si = &SCRIPT_ITEM(current_SID);
+ if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len) {
+ si = &SCRIPT_ITEM(current_sctx.sc_sid);
if (si->sn_prof_on && si->sn_pr_nest++ == 0) {
si->sn_pr_child = profile_start();
}
@@ -1094,8 +1094,8 @@ void script_prof_restore(proftime_T *tm)
{
scriptitem_T *si;
- if (current_SID > 0 && current_SID <= script_items.ga_len) {
- si = &SCRIPT_ITEM(current_SID);
+ if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len) {
+ si = &SCRIPT_ITEM(current_sctx.sc_sid);
if (si->sn_prof_on && --si->sn_pr_nest == 0) {
si->sn_pr_child = profile_end(si->sn_pr_child);
// don't count wait time
@@ -1192,8 +1192,8 @@ static void script_dump_profile(FILE *fd)
/// profiled.
bool 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;
}
@@ -3033,7 +3033,6 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
char_u *fname_exp;
char_u *firstline = NULL;
int retval = FAIL;
- scid_T save_current_SID;
static scid_T last_current_SID = 0;
void *save_funccalp;
int save_debug_break_level = debug_break_level;
@@ -3161,12 +3160,14 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
// Check if this script was sourced before to finds its SID.
// If it's new, generate a new SID.
- save_current_SID = current_SID;
+ const sctx_T save_current_sctx = current_sctx;
+ current_sctx.sc_lnum = 0;
FileID file_id;
bool file_id_ok = os_fileid((char *)fname_exp, &file_id);
assert(script_items.ga_len >= 0);
- for (current_SID = script_items.ga_len; current_SID > 0; current_SID--) {
- si = &SCRIPT_ITEM(current_SID);
+ for (current_sctx.sc_sid = script_items.ga_len; current_sctx.sc_sid > 0;
+ current_sctx.sc_sid--) {
+ si = &SCRIPT_ITEM(current_sctx.sc_sid);
// Compare dev/ino when possible, it catches symbolic links.
// Also compare file names, the inode may change when the file was edited.
bool file_id_equal = file_id_ok && si->file_id_valid
@@ -3176,15 +3177,15 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
break;
}
}
- if (current_SID == 0) {
- current_SID = ++last_current_SID;
- ga_grow(&script_items, (int)(current_SID - script_items.ga_len));
- while (script_items.ga_len < current_SID) {
+ if (current_sctx.sc_sid == 0) {
+ current_sctx.sc_sid = ++last_current_SID;
+ ga_grow(&script_items, (int)(current_sctx.sc_sid - script_items.ga_len));
+ while (script_items.ga_len < current_sctx.sc_sid) {
script_items.ga_len++;
SCRIPT_ITEM(script_items.ga_len).sn_name = NULL;
SCRIPT_ITEM(script_items.ga_len).sn_prof_on = false;
}
- si = &SCRIPT_ITEM(current_SID);
+ si = &SCRIPT_ITEM(current_sctx.sc_sid);
si->sn_name = fname_exp;
fname_exp = vim_strsave(si->sn_name); // used for autocmd
if (file_id_ok) {
@@ -3195,7 +3196,7 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
}
// Allocate the local script variables to use for this script.
- new_script_vars(current_SID);
+ new_script_vars(current_sctx.sc_sid);
}
if (l_do_profiling == PROF_YES) {
@@ -3236,7 +3237,7 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
if (l_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) {
si->sn_pr_start = profile_end(si->sn_pr_start);
si->sn_pr_start = profile_sub_wait(wait_start, si->sn_pr_start);
@@ -3277,7 +3278,7 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
debug_break_level++;
}
- current_SID = save_current_SID;
+ current_sctx = save_current_sctx;
restore_funccal(save_funccalp);
if (l_do_profiling == PROF_YES) {
prof_child_exit(&wait_start); // leaving a child now
@@ -3338,7 +3339,7 @@ char_u *get_scriptname(LastSet last_set, bool *should_free)
{
*should_free = false;
- switch (last_set.script_id) {
+ switch (last_set.script_ctx.sc_sid) {
case SID_MODELINE:
return (char_u *)_("modeline");
case SID_CMDARG:
@@ -3358,7 +3359,8 @@ char_u *get_scriptname(LastSet last_set, bool *should_free)
return IObuff;
default:
*should_free = true;
- return home_replace_save(NULL, SCRIPT_ITEM(last_set.script_id).sn_name);
+ return home_replace_save(NULL,
+ SCRIPT_ITEM(last_set.script_ctx.sc_sid).sn_name);
}
}
@@ -3585,10 +3587,10 @@ void 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
// here isn't counted.
@@ -3616,10 +3618,10 @@ void 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;
}
@@ -3631,10 +3633,10 @@ void 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) {
if (si->sn_prl_execed) {