summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-07-26 15:10:56 +0100
committerBram Moolenaar <Bram@vim.org>2022-07-26 15:10:56 +0100
commit6809ff978a5c5b798952db9fa663df9e1776f3ff (patch)
treeb0821fea1f29dbcc37110b62234ac8c2fda045b5
parent559f230fd618e51d7986d87217ff38a2eac73cef (diff)
downloadvim-git-9.0.0079.tar.gz
patch 9.0.0079: error in autoload script not reported for 'foldexpr'v9.0.0079
Problem: Error in autoload script not reported for 'foldexpr'. Solution: Reset "emsg_off" when auto-loading a script. (closes #10685)
-rw-r--r--src/testdir/test_vim9_script.vim24
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c10
3 files changed, 35 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index fc0ef15b8..98a4590c2 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3440,6 +3440,30 @@ def Test_error_in_autoload_script()
delete(dir, 'rf')
enddef
+def Test_error_in_autoload_script_foldexpr()
+ var save_rtp = &rtp
+ mkdir('Xvim/autoload', 'p')
+ &runtimepath = 'Xvim'
+
+ var lines =<< trim END
+ vim9script
+ eval [][0]
+ echomsg 'no error'
+ END
+ lines->writefile('Xvim/autoload/script.vim')
+
+ lines =<< trim END
+ vim9script
+ import autoload 'script.vim'
+ &foldmethod = 'expr'
+ &foldexpr = 'script.Func()'
+ redraw
+ END
+ v9.CheckScriptFailure(lines, 'E684: List index out of range: 0')
+
+ delete('Xvim', 'rf')
+enddef
+
def Test_invalid_sid()
assert_fails('func <SNR>1234_func', 'E123:')
diff --git a/src/version.c b/src/version.c
index a7fe96c94..bd75074af 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 79,
+/**/
78,
/**/
77,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index b7f590e10..c6316367e 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -610,12 +610,20 @@ find_imported(char_u *name, size_t len, int load)
ret = find_imported_in_script(name, len, current_sctx.sc_sid);
if (ret != NULL && load && (ret->imp_flags & IMP_FLAGS_AUTOLOAD))
{
- scid_T dummy;
+ scid_T dummy;
+ int save_emsg_off = emsg_off;
+
+ // "emsg_off" will be set when evaluating an expression silently, but
+ // we do want to know about errors in a script. Also because it then
+ // aborts when an error is encountered.
+ emsg_off = FALSE;
// script found before but not loaded yet
ret->imp_flags &= ~IMP_FLAGS_AUTOLOAD;
(void)do_source(SCRIPT_ITEM(ret->imp_sid)->sn_name, FALSE,
DOSO_NONE, &dummy);
+
+ emsg_off = save_emsg_off;
}
return ret;
}