summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/buffer.c4
-rw-r--r--src/eval.c6
-rw-r--r--src/findfile.c2
-rw-r--r--src/fold.c15
-rw-r--r--src/proto/eval.pro2
-rw-r--r--src/testdir/test_vim9_import.vim6
-rw-r--r--src/version.c2
7 files changed, 24 insertions, 13 deletions
diff --git a/src/buffer.c b/src/buffer.c
index d8d0f3cb5f..e50b01d4a7 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4162,7 +4162,7 @@ build_stl_str_hl(
tv.vval.v_number = wp->w_id;
set_var((char_u *)"g:statusline_winid", &tv, FALSE);
- usefmt = eval_to_string_safe(fmt + 2, use_sandbox);
+ usefmt = eval_to_string_safe(fmt + 2, use_sandbox, FALSE);
if (usefmt == NULL)
usefmt = fmt;
@@ -4546,7 +4546,7 @@ build_stl_str_hl(
if (curwin != save_curwin)
VIsual_active = FALSE;
- str = eval_to_string_safe(p, use_sandbox);
+ str = eval_to_string_safe(p, use_sandbox, FALSE);
curwin = save_curwin;
curbuf = save_curbuf;
diff --git a/src/eval.c b/src/eval.c
index ec34ef13e2..2ca3377492 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -555,14 +555,16 @@ eval_to_string(
char_u *
eval_to_string_safe(
char_u *arg,
- int use_sandbox)
+ int use_sandbox,
+ int keep_script_version)
{
char_u *retval;
funccal_entry_T funccal_entry;
int save_sc_version = current_sctx.sc_version;
int save_garbage = may_garbage_collect;
- current_sctx.sc_version = 1;
+ if (!keep_script_version)
+ current_sctx.sc_version = 1;
save_funccal(&funccal_entry);
if (use_sandbox)
++sandbox;
diff --git a/src/findfile.c b/src/findfile.c
index 110e06b1d6..3a6484574e 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -2097,7 +2097,7 @@ eval_includeexpr(char_u *ptr, int len)
set_vim_var_string(VV_FNAME, ptr, len);
res = eval_to_string_safe(curbuf->b_p_inex,
- was_set_insecurely((char_u *)"includeexpr", OPT_LOCAL));
+ was_set_insecurely((char_u *)"includeexpr", OPT_LOCAL), FALSE);
set_vim_var_string(VV_FNAME, NULL, 0);
return res;
}
diff --git a/src/fold.c b/src/fold.c
index 2a45d2108f..73c71160bd 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1923,7 +1923,6 @@ get_foldtext(
if (*wp->w_p_fdt != NUL)
{
char_u dashes[MAX_LEVEL + 2];
- win_T *save_curwin;
int level;
char_u *p;
@@ -1941,23 +1940,27 @@ get_foldtext(
set_vim_var_string(VV_FOLDDASHES, dashes, -1);
set_vim_var_nr(VV_FOLDLEVEL, (long)level);
- // skip evaluating foldtext on errors
+ // skip evaluating 'foldtext' on errors
if (!got_fdt_error)
{
- save_curwin = curwin;
+ win_T *save_curwin = curwin;
+ sctx_T saved_sctx = current_sctx;
+
curwin = wp;
curbuf = wp->w_buffer;
+ current_sctx = wp->w_p_script_ctx[WV_FDT];
- ++emsg_silent; // handle exceptions, but don't display errors
+ ++emsg_off; // handle exceptions, but don't display errors
text = eval_to_string_safe(wp->w_p_fdt,
- was_set_insecurely((char_u *)"foldtext", OPT_LOCAL));
- --emsg_silent;
+ was_set_insecurely((char_u *)"foldtext", OPT_LOCAL), TRUE);
+ --emsg_off;
if (text == NULL || did_emsg)
got_fdt_error = TRUE;
curwin = save_curwin;
curbuf = curwin->w_buffer;
+ current_sctx = saved_sctx;
}
last_lnum = lnum;
last_wp = wp;
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index b0e94a0d76..abb9c565e2 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -14,7 +14,7 @@ int skip_expr_concatenate(char_u **arg, char_u **start, char_u **end, evalarg_T
char_u *typval2string(typval_T *tv, int convert);
char_u *eval_to_string_eap(char_u *arg, int convert, exarg_T *eap);
char_u *eval_to_string(char_u *arg, int convert);
-char_u *eval_to_string_safe(char_u *arg, int use_sandbox);
+char_u *eval_to_string_safe(char_u *arg, int use_sandbox, int keep_script_version);
varnumber_T eval_to_number(char_u *expr);
typval_T *eval_expr(char_u *arg, exarg_T *eap);
int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv);
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index df22a7719c..3608802b19 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -683,6 +683,9 @@ def Test_use_autoload_import_in_fold_expression()
export def Expr(): string
return getline(v:lnum) =~ '^#' ? '>1' : '1'
enddef
+ export def Text(): string
+ return 'fold text'
+ enddef
g:fold_loaded = 'yes'
END
writefile(lines, 'Xdir/autoload/fold.vim')
@@ -691,6 +694,7 @@ def Test_use_autoload_import_in_fold_expression()
vim9script
import autoload 'fold.vim'
&foldexpr = 'fold.Expr()'
+ &foldtext = 'fold.Text()'
&foldmethod = 'expr'
&debug = 'throw'
END
@@ -706,7 +710,7 @@ def Test_use_autoload_import_in_fold_expression()
edit! otherfile
redraw
- set foldexpr= foldmethod& debug=
+ set foldexpr= foldtext& foldmethod& debug=
bwipe!
delete('Xdir', 'rf')
&rtp = save_rtp
diff --git a/src/version.c b/src/version.c
index f273a155f8..86eb140126 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4179,
+/**/
4178,
/**/
4177,