1
0
forked from aniani/vim

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
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

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4066,
/**/
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)
{
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;
}

View File

@@ -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,11 +275,13 @@ ex_export(exarg_T *eap)
// The command will reset "is_export" when exporting an item.
if (is_export)
{
if (did_emsg == prev_did_emsg)
emsg(_(e_export_with_invalid_argument));
is_export = FALSE;
}
break;
default:
if (did_emsg == prev_did_emsg)
emsg(_(e_invalid_command_after_export));
break;
}
@@ -589,6 +593,8 @@ handle_import(
&& check_defined(as_name, STRLEN(as_name), cctx, FALSE) == FAIL)
goto erret;
if (imported == NULL)
{
imported = new_imported(import_gap);
if (imported == NULL)
goto erret;
@@ -598,6 +604,7 @@ handle_import(
if (is_autoload)
imported->imp_flags = IMP_FLAGS_AUTOLOAD;
}
}
erret:
clear_tv(&tv);