0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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.
This commit is contained in:
Bram Moolenaar
2022-01-12 11:46:40 +00:00
parent 3cf21b3051
commit 17d36cbcd3
4 changed files with 29 additions and 13 deletions

View File

@@ -1140,7 +1140,7 @@ def Test_vim9script_autoload()
# when using "vim9script autoload" prefix is not needed # when using "vim9script autoload" prefix is not needed
var lines =<< trim END var lines =<< trim END
vim9script autoload vim9script autoload
g:prefixed_loaded = 'yes' g:prefixed_loaded += 1
export def Gettest(): string export def Gettest(): string
return 'test' return 'test'
@@ -1156,12 +1156,14 @@ def Test_vim9script_autoload()
END END
writefile(lines, 'Xdir/autoload/prefixed.vim') writefile(lines, 'Xdir/autoload/prefixed.vim')
g:prefixed_loaded = 0
g:expected_loaded = 0
lines =<< trim END lines =<< trim END
vim9script vim9script
import autoload 'prefixed.vim' 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('test', prefixed.Gettest())
assert_equal('yes', g:prefixed_loaded) assert_equal(1, g:prefixed_loaded)
assert_equal('testmore', prefixed.GetMore()) assert_equal('testmore', prefixed.GetMore())
assert_equal('name', prefixed.name) assert_equal('name', prefixed.name)
@@ -1169,6 +1171,9 @@ def Test_vim9script_autoload()
assert_equal('const', prefixed.cname) assert_equal('const', prefixed.cname)
END END
CheckScriptSuccess(lines) 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 # can also get the items by autoload name
lines =<< trim END lines =<< trim END

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4066,
/**/ /**/
4065, 4065,
/**/ /**/

View File

@@ -623,10 +623,12 @@ find_imported(char_u *name, size_t len, int load, cctx_T *cctx)
if (ret != NULL && load && ret->imp_flags == IMP_FLAGS_AUTOLOAD) if (ret != NULL && load && ret->imp_flags == IMP_FLAGS_AUTOLOAD)
{ {
scid_T dummy;
// script found before but not loaded yet // script found before but not loaded yet
ret->imp_flags = 0; ret->imp_flags = 0;
(void)do_source(SCRIPT_ITEM(ret->imp_sid)->sn_name, FALSE, (void)do_source(SCRIPT_ITEM(ret->imp_sid)->sn_name, FALSE,
DOSO_NONE, NULL); DOSO_NONE, &dummy);
} }
return ret; return ret;
} }

View File

@@ -250,6 +250,8 @@ ex_incdec(exarg_T *eap)
void void
ex_export(exarg_T *eap) ex_export(exarg_T *eap)
{ {
int prev_did_emsg = did_emsg;
if (!in_vim9script()) if (!in_vim9script())
{ {
emsg(_(e_export_can_only_be_used_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. // The command will reset "is_export" when exporting an item.
if (is_export) if (is_export)
{ {
emsg(_(e_export_with_invalid_argument)); if (did_emsg == prev_did_emsg)
emsg(_(e_export_with_invalid_argument));
is_export = FALSE; is_export = FALSE;
} }
break; break;
default: default:
emsg(_(e_invalid_command_after_export)); if (did_emsg == prev_did_emsg)
emsg(_(e_invalid_command_after_export));
break; break;
} }
} }
@@ -589,14 +593,17 @@ handle_import(
&& check_defined(as_name, STRLEN(as_name), cctx, FALSE) == FAIL) && check_defined(as_name, STRLEN(as_name), cctx, FALSE) == FAIL)
goto erret; goto erret;
imported = new_imported(import_gap);
if (imported == NULL) if (imported == NULL)
goto erret; {
imported->imp_name = as_name; imported = new_imported(import_gap);
as_name = NULL; if (imported == NULL)
imported->imp_sid = sid; goto erret;
if (is_autoload) imported->imp_name = as_name;
imported->imp_flags = IMP_FLAGS_AUTOLOAD; as_name = NULL;
imported->imp_sid = sid;
if (is_autoload)
imported->imp_flags = IMP_FLAGS_AUTOLOAD;
}
} }
erret: erret: