diff options
Diffstat (limited to 'src/nvim/ex_cmds2.c')
-rw-r--r-- | src/nvim/ex_cmds2.c | 54 |
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) { |