From b5841b99e678da187b68c21f46d56a608a0dc10c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 15 Jul 2021 18:09:53 +0200 Subject: patch 8.2.3166: Vim9: nested autoload call error overruled by "Unknown error" Problem: Vim9: nested autoload call error overruled by "Unknown error". Solution: Check need_rethrow before giving an "Unknown error". (closes #8568) --- src/testdir/test_vim9_script.vim | 40 ++++++++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9execute.c | 3 ++- 3 files changed, 44 insertions(+), 1 deletion(-) 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 @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3166, /**/ 3165, /**/ 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); -- cgit v1.2.3