summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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;
}