summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-07-15 18:09:53 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-15 18:09:53 +0200
commitb5841b99e678da187b68c21f46d56a608a0dc10c (patch)
tree8c35638d42821a3a081ccb49ebe22abcb44e7e75
parent9e60e899ee546a8a35c4cbe0319971719c1839e9 (diff)
patch 8.2.3166: Vim9: nested autoload call error overruled by "Unknown error"v8.2.3166
Problem: Vim9: nested autoload call error overruled by "Unknown error". Solution: Check need_rethrow before giving an "Unknown error". (closes #8568)
-rw-r--r--src/testdir/test_vim9_script.vim40
-rw-r--r--src/version.c2
-rw-r--r--src/vim9execute.c3
3 files changed, 44 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index b4107e97d1..bd06f7a2e9 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3699,6 +3699,46 @@ def Test_script_var_in_autocmd()
CheckScriptSuccess(lines)
enddef
+def Test_error_in_autoload_script()
+ var save_rtp = &rtp
+ var dir = getcwd() .. '/Xruntime'
+ &rtp = dir
+ mkdir(dir .. '/autoload', 'p')
+
+ var lines =<< trim END
+ vim9script noclear
+ def script#autoloaded()
+ enddef
+ def Broken()
+ var x: any = ''
+ eval x != 0
+ enddef
+ Broken()
+ END
+ writefile(lines, dir .. '/autoload/script.vim')
+
+ lines =<< trim END
+ vim9script
+ def CallAutoloaded()
+ script#autoloaded()
+ enddef
+
+ function Legacy()
+ try
+ call s:CallAutoloaded()
+ catch
+ call assert_match('E1030: Using a String as a Number', v:exception)
+ endtry
+ endfunction
+
+ Legacy()
+ END
+ CheckScriptSuccess(lines)
+
+ &rtp = save_rtp
+ delete(dir, 'rf')
+enddef
+
def Test_cmdline_win()
# if the Vim syntax highlighting uses Vim9 constructs they can be used from
# the command line window.
diff --git a/src/version.c b/src/version.c
index ba8362bccf..896ca07b8b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3166,
+/**/
3165,
/**/
3164,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 41249284dc..b882c4d111 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -4737,7 +4737,8 @@ failed_early:
// Not sure if this is necessary.
suppress_errthrow = save_suppress_errthrow;
- if (ret != OK && did_emsg_cumul + did_emsg == did_emsg_before)
+ if (ret != OK && did_emsg_cumul + did_emsg == did_emsg_before
+ && !need_rethrow)
semsg(_(e_unknown_error_while_executing_str),
printable_func_name(ufunc));
funcdepth_restore(orig_funcdepth);