Mercurial > vim
changeset 27074:19fefc42a063 v8.2.4066
patch 8.2.4066: Vim9: imported autoload script loaded again
Commit: https://github.com/vim/vim/commit/17d36cbcd36d944c744ef68afa971718959b2111
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 12 11:46:40 2022 +0000
patch 8.2.4066: Vim9: imported autoload script loaded again
Problem: Vim9: imported autoload script loaded again.
Solution: Do not create a new imported_T every time.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 12 Jan 2022 13:00:06 +0100 |
parents | 4ab8aec1b847 |
children | 02bf1cf035da |
files | src/testdir/test_vim9_import.vim src/version.c src/vim9compile.c src/vim9script.c |
diffstat | 4 files changed, 29 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -1140,7 +1140,7 @@ def Test_vim9script_autoload() # when using "vim9script autoload" prefix is not needed var lines =<< trim END vim9script autoload - g:prefixed_loaded = 'yes' + g:prefixed_loaded += 1 export def Gettest(): string return 'test' @@ -1156,12 +1156,14 @@ def Test_vim9script_autoload() END writefile(lines, 'Xdir/autoload/prefixed.vim') + g:prefixed_loaded = 0 + g:expected_loaded = 0 lines =<< trim END vim9script import autoload 'prefixed.vim' - assert_false(exists('g:prefixed_loaded')) + assert_equal(g:expected_loaded, g:prefixed_loaded) assert_equal('test', prefixed.Gettest()) - assert_equal('yes', g:prefixed_loaded) + assert_equal(1, g:prefixed_loaded) assert_equal('testmore', prefixed.GetMore()) assert_equal('name', prefixed.name) @@ -1169,6 +1171,9 @@ def Test_vim9script_autoload() assert_equal('const', prefixed.cname) END CheckScriptSuccess(lines) + # can source it again, autoload script not loaded again + g:expected_loaded = 1 + CheckScriptSuccess(lines) # can also get the items by autoload name lines =<< trim END
--- 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 */ /**/ + 4066, +/**/ 4065, /**/ 4064,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -623,10 +623,12 @@ find_imported(char_u *name, size_t len, if (ret != NULL && load && ret->imp_flags == IMP_FLAGS_AUTOLOAD) { + scid_T dummy; + // script found before but not loaded yet ret->imp_flags = 0; (void)do_source(SCRIPT_ITEM(ret->imp_sid)->sn_name, FALSE, - DOSO_NONE, NULL); + DOSO_NONE, &dummy); } return ret; }
--- a/src/vim9script.c +++ b/src/vim9script.c @@ -250,6 +250,8 @@ ex_incdec(exarg_T *eap) void ex_export(exarg_T *eap) { + int prev_did_emsg = did_emsg; + if (!in_vim9script()) { emsg(_(e_export_can_only_be_used_in_vim9script)); @@ -273,12 +275,14 @@ ex_export(exarg_T *eap) // The command will reset "is_export" when exporting an item. if (is_export) { - emsg(_(e_export_with_invalid_argument)); + if (did_emsg == prev_did_emsg) + emsg(_(e_export_with_invalid_argument)); is_export = FALSE; } break; default: - emsg(_(e_invalid_command_after_export)); + if (did_emsg == prev_did_emsg) + emsg(_(e_invalid_command_after_export)); break; } } @@ -589,14 +593,17 @@ handle_import( && check_defined(as_name, STRLEN(as_name), cctx, FALSE) == FAIL) goto erret; - imported = new_imported(import_gap); if (imported == NULL) - goto erret; - imported->imp_name = as_name; - as_name = NULL; - imported->imp_sid = sid; - if (is_autoload) - imported->imp_flags = IMP_FLAGS_AUTOLOAD; + { + imported = new_imported(import_gap); + if (imported == NULL) + goto erret; + imported->imp_name = as_name; + as_name = NULL; + imported->imp_sid = sid; + if (is_autoload) + imported->imp_flags = IMP_FLAGS_AUTOLOAD; + } } erret: